求助:YouTube Transcript API仅非生产可用,生产环境报错
问题排查与解决方案
可能原因分析
生产环境IP被YouTube反爬机制拦截
youtube-transcript-api并非YouTube官方API,它通过爬取网页获取字幕。生产服务器的固定IP如果频繁发起请求,容易被YouTube标记为爬虫,返回虚假的「TranscriptsDisabled」错误(即使目标视频字幕实际可用)。请求User-Agent配置缺失/不合法
非生产环境通常使用本地浏览器的User-Agent,符合正常访问特征;而生产环境中库默认的UA可能过于简单,被YouTube的反爬系统识别为非人类请求,进而拦截。生产与非生产环境的库版本不一致
如果两边的youtube-transcript-api版本不同,新版本可能存在兼容性问题,或者旧版本的漏洞在生产环境触发了错误。地区访问限制(低概率)
生产服务器所在地区可能被YouTube限制了字幕访问权限,但此情况通常不会针对所有视频生效,优先级较低。
对应解决方案
1. 配置代理或使用旋转IP
针对IP被拦截的情况,可在生产环境配置代理IP池,或者使用云服务商的动态IP服务,避免单一IP频繁请求被标记。修改代码中API调用部分,添加代理参数:
# 示例:添加代理配置 transcript_list = YouTubeTranscriptApi.list_transcripts( video_id, proxies={"http": "http://your-proxy:port", "https": "http://your-proxy:port"} )
2. 自定义合法的User-Agent
在初始化请求时,设置符合真实浏览器特征的User-Agent,模拟正常用户访问:
from youtube_transcript_api._api import YouTubeTranscriptApi import requests # 自定义session,设置User-Agent session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" }) # 使用自定义session调用API transcript_list = YouTubeTranscriptApi.list_transcripts(video_id, requests_session=session)
3. 对齐生产与非生产环境的库版本
检查两边的youtube-transcript-api版本,确保一致:
# 查看当前版本 pip show youtube-transcript-api # 安装指定版本 pip install youtube-transcript-api==<非生产环境的版本号>
4. 验证地区访问权限(可选)
可临时在生产服务器上手动访问目标视频的字幕页面,确认是否能正常加载,排除地区限制因素。
额外调试建议
- 在生产环境中添加更详细的请求日志,记录请求的Headers、响应状态码和完整响应内容,进一步定位拦截原因。
- 尝试使用YouTube官方的YouTube Data API v3替代第三方库,官方API更稳定,不会触发反爬限制(需要申请API密钥)。
内容的提问来源于stack exchange,提问作者JimmyProton
相关产品推荐
相关产品推荐

