使用pytube下载YouTube内容时出现KeyError: 'streamingData'问题求助
解决pytube的KeyError: 'streamingData'问题
这个错误是因为YouTube更新了视频流的数据结构,旧版本的pytube无法正确解析streamingData字段导致的,以下是具体解决方案:
1. 升级pytube到最新版本
执行以下命令更新pytube到官方最新版,官方会持续跟进YouTube的结构变化:
pip install --upgrade pytube
如果官方正式版仍然存在问题,可以安装GitHub上的最新开发分支:
pip install git+https://github.com/pytube/pytube.git
2. 检查视频/播放列表的可访问性
如果升级后仍然报错,需要确认目标视频/播放列表是否存在以下情况:
- 视频是年龄限制内容
- 视频被地区封锁
- 播放列表是私人列表
这类内容pytube默认无法获取流数据,需要额外配置Cookie才能访问,示例代码:
from pytube import YouTube yt = YouTube( "视频URL", cookies={ "CONSENT": "YES+...", # 替换为你浏览器中的YouTube Cookie值 "LOGIN_INFO": "..." } )
3. 代码优化建议
你的代码可以添加错误处理,避免单个视频失败导致整个播放列表中断,同时修正播放列表输入逻辑(需要输入URL而非名称):
# 在playlist函数中添加try-except块并优化路径 def playlist(): p = Playlist(input('Enter Playlist URL \n>> ')) # 此处需输入播放列表URL for url in p.video_urls: try: time_1 = time.time() yt = YouTube(url) print(f"Processing: {yt.title}") audio = yt.streams.filter(only_audio=True).first() video = yt.streams.filter(only_video=True).first() # 用os.path处理路径,确保目录存在 audio_path = os.path.join(os.path.expanduser("~"), "Downloads", "BAM") video_path = os.path.join(os.path.expanduser("~"), "Downloads", "video") os.makedirs(audio_path, exist_ok=True) os.makedirs(video_path, exist_ok=True) out_file_audio = audio.download(output_path=audio_path) out_file_video = video.download(output_path=video_path) base, ext = os.path.splitext(out_file_audio) os.rename(out_file_audio, base + '.mp3') base, ext = os.path.splitext(out_file_video) os.rename(out_file_video, base + '.mp4') print(f"{yt.title} 下载完成。") time_2 = time.time() elapsed = time_2 - time_1 times.append(elapsed) moyenne = sum(times)/len(times) print(f"耗时: {elapsed:.2f}s | 平均耗时: {moyenne:.2f}s") except Exception as e: print(f"下载 {url} 失败: {str(e)}") continue print("播放列表下载完成!")
内容的提问来源于stack exchange,提问作者SolVig
相关产品推荐
相关产品推荐

