I am trying to use pytube
(v15.0.0) to fetch the titles of YouTube videos. However, for every video I try, my script fails with the same error: HTTP Error 400: Bad Request
.
I have already updated pytube
to the latest version by running pip install --upgrade pytube
, but the problem persists.
Minimal, Reproducible Example
Here is the smallest possible script that demonstrates this problem. It only uses pytube
and has no other dependencies. Anyone can copy and run this code to see the error.
import logging
from pytube import YouTube
# Configure logging to see the error clearly
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def fetch_video_title(video_id):
"""
Attempts to fetch a single video title using pytube.
This function consistently fails.
"""
video_url = f"https://www.youtube.com/watch?v={video_id}"
logging.info(f"Attempting to fetch title for: {video_url}")
try:
# Create a YouTube object
yt = YouTube(video_url)
# Accessing the .title attribute triggers the network request
title = yt.title
logging.info(f"SUCCESS: Title is '{title}'")
return title
except Exception as e:
# The script always ends up here
logging.error(f"FAILURE for video ID '{video_id}': {e}")
return None
# Main execution block to run the test
if __name__ == "__main__":
# A list of standard YouTube video IDs to test
video_ids_to_test = ["G_Ttz9Dp5lI", "n2f2MPDScdc"]
print("--- Starting Pytube Title Fetch Test ---")
for video_id in video_ids_to_test:
fetch_video_title(video_id)
print("\n--- Test Finished ---")
What I Get (Actual Output):
When I run the code above, the output clearly shows the HTTP Error 400
for each attempt:
--- Starting Pytube Title Fetch Test ---
2025-08-14 12:30:00 - INFO - Attempting to fetch title for: https://www.youtube.com/watch?v=G_Ttz9Dp5lI
2025-08-14 12:30:02 - ERROR - FAILURE for video ID 'G_Ttz9Dp5lI': HTTP Error 400: Bad Request
2025-08-14 12:30:02 - INFO - Attempting to fetch title for: https://www.youtube.com/watch?v=n2f2MPDScdc
2025-08-14 12:30:04 - ERROR - FAILURE for video ID 'n2f2MPDScdc': HTTP Error 400: Bad Request
--- Test Finished ---
What I Expect:
I expect the script to successfully connect to YouTube and print the title for each video, like this:
--- Starting Pytube Title Fetch Test ---
2025-08-14 12:30:00 - INFO - Attempting to fetch title for: https://www.youtube.com/watch?v=G_Ttz9Dp5lI
2025-08-14 12:30:02 - INFO - SUCCESS: Title is '[Actual Video Title Here]'
...
--- Test Finished ---
My Question:
Given that I am using the latest version of pytube
and my code is very simple, is this HTTP 400
error a known, temporary issue with the library (e.g., YouTube changed something that broke pytube
), or is there a mistake in my code that I am missing?