Pytube下载工具突发urllib.error.HTTPError 400错误求助
pytube 抛出 HTTP Error 400: Bad Request 问题修复方案
近期使用pytube开发的视频/播放列表下载工具突然无法运行,触发HTTP Error 400: Bad Request错误,且官方示例程序也出现相同问题,可排除自身代码逻辑问题。该问题通常是由于YouTube调整了API接口,导致旧版pytube无法兼容。
解决方案
1. 升级pytube到最新版本
YouTube频繁调整接口规则,pytube官方会持续跟进修复,优先尝试升级到最新版:
pip install --upgrade pytube
若使用Python3,可替换为pip3。
2. 安装pytube开发分支(若稳定版未修复)
若升级稳定版后问题仍存在,可安装pytube的master开发分支,该分支通常包含最新的修复:
pip install git+https://github.com/pytube/pytube.git@master
3. 手动替换innertube.py中的API密钥(临时修复)
如果上述方法无效,可手动修改pytube的innertube.py文件,更新其中的API密钥:
- 找到pytube安装目录下的
innertube.py(路径类似C:\Users\你的用户名\AppData\Local\Programs\Python\Python39\lib\site-packages\pytube\innertube.py) - 定位到
self.base_data字典中的key字段,将其替换为当前有效的YouTube客户端密钥(可从浏览器访问YouTube时的网络请求中提取) - 修改示例:
self.base_data = { "context": { "client": { "clientName": "WEB", "clientVersion": "2.20240520.01.00", "key": "替换为新的有效密钥" } } }
4. 临时替代方案:使用yt-dlp
若pytube长期无法修复,可切换到功能更稳定、更新更及时的yt-dlp库:
- 安装yt-dlp:
pip install yt-dlp
- 基础使用示例:
- 下载单视频(MP4):
import yt_dlp def download_video(url): ydl_opts = { 'format': 'mp4', 'outtmpl': '%(title)s.%(ext)s', } with yt_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download([url])- 下载播放列表(MP4):
def download_playlist(url): ydl_opts = { 'format': 'mp4', 'outtmpl': '%(playlist_title)s/%(title)s.%(ext)s', } with yt_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download([url])- 下载音频并转MP3:
def download_audio(url): ydl_opts = { 'format': 'bestaudio/best', 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', }], 'outtmpl': '%(title)s.%(ext)s', } with yt_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download([url])
内容的提问来源于stack exchange,提问作者Mr. Margarine
相关产品推荐
相关产品推荐

