You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:07:19