youtube-transcript-api 被阻止?修复 AWS/GCP 上的 IP 限制

该脚本在你的笔记本电脑上完美运行了数周。然后你部署它——Lambda、EC2 实例、Cloud Run、Heroku dyno,不管什么——现在对 youtube-transcript-api 的每次调用都会因为类似这样的错误而失败:
youtube_transcript_api._errors.IpBlocked:
Could not retrieve a transcript for the video ...
YouTube is blocking requests from your IP.
或浏览器版本的同样问题:"登录以确认你不是机器人"。你的代码没有改变。这个库没有问题。问题在于你的 IP 地址。
为什么只在生产环境中出现
youtube-transcript-api 的工作原理是以 YouTube 播放器相同的方式获取字幕数据——无需 API 密钥,只是向 YouTube 发送 HTTP 请求。YouTube 可以容忍来自住宅网络的此类请求,这就是为什么本地开发感觉良好。但 AWS、GCP、Azure 和 Heroku 的 IP 范围是公开的,YouTube 对来自这些 ASN 的流量进行全面挑战。无论你一天只发送三个请求,限制都是在网络邻域级别,而不是基于行为。重启实例、获得新的弹性 IP、重新部署函数——你会落在同一被限制池中的另一个地址上。
这值得深入理解,因为第一反应(添加重试、添加延迟、轮换用户代理)是无效的。YouTube 关键响应的信号是数据包来自何处。
修复 1:运行自己的住宅代理
该库直接支持这一点——它附带了 WebshareProxyConfig 和任何提供商的 GenericProxyConfig。通过住宅 IP 路由请求,限制基本会停止。这确实有效;这是任何大规模爬取 YouTube 的人存活的方式。
但诚实的成本核算是:
- 成本:住宅带宽大约每 GB 3-8 美元,取决于提供商,体面的提供商需要月度承诺——现实地说在你获取任何东西之前 30-100 美元/月。每次转录文本获取都很小(几百 KB),所以带宽不是痛点;最低费用和账户开销才是。
- 工程:你需要管理轮换、重新尝试禁用逻辑和监控。住宅 IP 也会被挑战,只是频率较低,所以你仍然需要检测故障并重新路由。
- 持续关注:YouTube 会改变。三月起效的代理设置到六月需要维护。
如果你已经为其他爬取运行代理基础设施,将其集成是合理的。如果转录文本是你唯一需要的,你就要操作一个代理集群来支持一个函数调用了。
修复 2:调用一个已经处理此问题的端点
youtube2text.org 在服务器端进行住宅代理轮换,因此你的云函数发送一个普通的 HTTPS 请求到常规 API。迁移几乎是查找和替换。
之前:
from youtube_transcript_api import YouTubeTranscriptApi
transcript = YouTubeTranscriptApi().fetch(video_id)
text = " ".join(snippet.text for snippet in transcript)
之后:
import requests
r = requests.get(
"https://youtube2text.org/api/transcribe",
params={"url": video_id}, # full URLs work too
headers={"x-api-key": "yt_YOUR_KEY"},
)
text = r.json()["result"]["content"]
要在创建账户前尝试,获取共享演示密钥——curl -s https://youtube2text.org/api/demo-key——允许每个 IP 每月 5 个视频。错误作为结构化 JSON 返回,代码值得处理:TRANSCRIPT_UNAVAILABLE(404)意味着视频真的没有字幕——不是限制,任何代理都无法修复;RATE_LIMIT_EXCEEDED(429)包含重试提示。Python 集成指南中有更全面的 Python 演练。
哪个修复适合你
- 保持使用 youtube-transcript-api + 你自己的代理,如果你每天获取数千份转录文本,已经有代理账户,并有人来管理设置。在该规模,每 GB 定价可以超过每个视频定价。
- 切换到托管端点,如果转录文本是功能,而不是你的产品。一个 HTTP 调用,JSON 输出,限制问题是别人的事。
- 都不能修复缺少的字幕。 对于返回
TRANSCRIPT_UNAVAILABLE的视频,备选方案是语音转文本——看 Whisper vs YouTube 字幕了解何时值得成本。如果你想尝试 yt-dlp 代替,要注意它会从数据中心地址触发相同的 IP 限制。
你自己的密钥(与共享演示配额分开)在 youtube2text.org/app/keys 需要 Google 登录——免费层是 5 个视频/月,付费计划从 50 个视频 5.99 美元/月起,无限制 19.99 美元。免费层无需电话号码、无需信用卡。