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

如何用Python处理YouTube字幕禁用错误,获取播放列表有效字幕?

解决YouTube播放列表字幕获取时的无字幕视频报错问题

批量获取字幕时,只要存在无字幕的视频,get_transcripts()就会直接抛出异常终止程序,导致其他有字幕的视频数据也无法获取。我们可以通过逐个处理视频+异常捕获的方式跳过无字幕视频,保留有效数据。

修改后的代码

from googleapiclient.discovery import build
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api._errors import TranscriptsDisabled
import os

api_key = "*********************************"

# 1. 查询API获取播放列表内容
rq = build("youtube", "v3", developerKey=api_key).playlistItems().list(
        part="contentDetails, snippet",
        playlistId="PL-osiE80TeTtoQCKZ03TU5fNfx2UY6U4p",
        maxResults=50,        
        ).execute()

# 2. 存储有效视频的标题和字幕
video_data = []

# 3. 逐个处理视频,捕获无字幕异常
for item in rq["items"]:
    vid_id = item["contentDetails"]["videoId"]
    vid_title = item["snippet"]["title"]
    
    try:
        # 获取当前视频的字幕(可指定语言,例如languages=['zh-CN']获取中文字幕)
        transcript = YouTubeTranscriptApi.get_transcript(vid_id)
        # 将字幕片段拼接为完整文本
        transcript_text = " ".join([line["text"] for line in transcript])
        video_data.append({
            "title": vid_title,
            "video_id": vid_id,
            "transcript": transcript_text
        })
        print(f"成功获取视频《{vid_title}》的字幕")
    except TranscriptsDisabled:
        print(f"跳过视频《{vid_title}》:该视频字幕已禁用")
    except Exception as e:
        print(f"视频《{vid_title}》处理失败:{str(e)}")

# 查看获取到的有效数据
print("\n已获取的有效视频内容:")
for idx, data in enumerate(video_data, 1):
    print(f"{idx}. 标题:{data['title']}")
    print(f"   字幕预览:{data['transcript'][:100]}...\n")

关键修改说明

  • 引入TranscriptsDisabled异常类,精准捕获字幕禁用的场景,避免误处理其他类型的错误
  • 放弃批量调用get_transcripts(),改为逐个处理每个视频,确保单个视频失败不影响整体流程
  • 用列表+字典结构存储有效数据,方便后续导出或分析
  • 增加控制台日志,清晰展示每个视频的处理状态,便于排查问题

内容的提问来源于stack exchange,提问作者José Angel Bernal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:06:24