如何用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
相关产品推荐
相关产品推荐

