YouTube Transcript API 部署与使用教程
本教程将指引您安装、配置并使用 youtube-transcript-api,这是一个无需API密钥即可获取YouTube视频字幕的Python库。
📋 1. 准备工作
- Python环境:确保已安装 Python 3.8 或更高版本。
- 包管理工具:推荐使用
pip 或 poetry。
- 网络环境:能够正常访问 YouTube。
🚀 2. 安装
推荐使用 pip 进行安装,这是最直接的方式。
打开您的终端(命令行)并执行:
1
| pip install youtube-transcript-api
|
如果您希望进行开发或贡献代码,可以克隆仓库并使用 poetry 安装包含测试和开发依赖的完整环境:
1 2 3
| git clone https://github.com/jdepoix/youtube-transcript-api.git cd youtube-transcript-api poetry install --with test,dev
|
💻 3. 基本使用 (API)
3.1 获取单个视频的字幕
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| from youtube_transcript_api import YouTubeTranscriptApi
ytt_api = YouTubeTranscriptApi()
video_id = "YOUR_VIDEO_ID_HERE"
fetched_transcript = ytt_api.fetch(video_id)
for snippet in fetched_transcript: print(f"{snippet.start}s - {snippet.text}")
raw_data = fetched_transcript.to_raw_data() print(raw_data)
|
注意:fetch() 方法默认获取英文字幕。如果视频没有英文字幕,会抛出异常。
3.2 指定字幕语言
通过 languages 参数指定语言代码(按优先级顺序):
1 2 3 4 5
| fetched_transcript = ytt_api.fetch( video_id, languages=['de', 'en'] )
|
3.3 列出视频所有可用字幕
1 2 3 4 5 6 7 8 9 10 11 12
| transcript_list = ytt_api.list(video_id)
transcript = transcript_list.find_transcript(['en', 'zh-Hans'])
fetched_transcript = transcript.fetch()
manual_transcript = transcript_list.find_manually_created_transcript(['en']) generated_transcript = transcript_list.find_generated_transcript(['en'])
|
3.4 翻译字幕
利用YouTube的自动翻译功能:
1 2 3 4 5 6 7 8
| transcript_en = transcript_list.find_transcript(['en'])
transcript_de = transcript_en.translate('de')
fetched_transcript_de = transcript_de.fetch()
|
3.5 保留格式
通过 preserve_formatting=True 保留 <i> 和 <b> 等HTML格式标签:
1 2 3 4
| fetched_transcript = ytt_api.fetch( video_id, preserve_formatting=True )
|
🛠️ 4. 高级配置
4.1 自定义HTTP客户端
您可以通过传递 requests.Session 对象来自定义网络请求:
1 2 3 4 5 6 7 8
| from requests import Session
http_client = Session() http_client.headers.update({"Accept-Encoding": "gzip, deflate"}) http_client.verify = "/path/to/certfile"
ytt_api = YouTubeTranscriptApi(http_client=http_client) fetched_transcript = ytt_api.fetch(video_id)
|
4.2 使用代理(应对IP封锁)
YouTube可能会封锁某些IP(特别是云服务商的IP),您可以使用代理来解决。
方案一:使用Webshare(推荐,已集成)
- 注册 Webshare 账户并购买“Residential”代理套餐。
- 在Proxy Settings中找到“Proxy Username”和“Proxy Password”。
- 在代码中配置:
1 2 3 4 5 6 7 8 9 10 11 12 13
| from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.proxies import WebshareProxyConfig
ytt_api = YouTubeTranscriptApi( proxy_config=WebshareProxyConfig( proxy_username="你的_Proxy_用户名", proxy_password="你的_Proxy_密码", filter_ip_locations=["de", "us"], ) )
fetched_transcript = ytt_api.fetch(video_id)
|
方案二:使用通用HTTP/HTTPS代理
1 2 3 4 5 6 7 8 9 10 11
| from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.proxies import GenericProxyConfig
ytt_api = YouTubeTranscriptApi( proxy_config=GenericProxyConfig( http_url="http://user:pass@my-proxy.com:port", https_url="https://user:pass@my-proxy.com:port", ) )
fetched_transcript = ytt_api.fetch(video_id)
|
⌨️ 5. 命令行界面 (CLI)
安装后,您可以直接在终端使用 youtube_transcript_api 命令。
5.1 基本用法
1 2 3 4 5 6 7 8 9 10 11
| youtube_transcript_api VIDEO_ID_1 VIDEO_ID_2
youtube_transcript_api VIDEO_ID --languages de en
youtube_transcript_api VIDEO_ID --languages en --exclude-generated
youtube_transcript_api VIDEO_ID --languages en --exclude-manually-created
|
5.2 格式化输出与保存
1 2 3 4 5
| youtube_transcript_api VIDEO_ID --format json > transcript.json
youtube_transcript_api VIDEO_ID --languages en --translate de
|
5.3 列出可用字幕
1
| youtube_transcript_api --list-transcripts VIDEO_ID
|
5.4 代理与认证 (CLI)
1 2 3 4 5 6 7 8 9 10 11 12
| youtube_transcript_api VIDEO_ID \ --webshare-proxy-username "用户名" \ --webshare-proxy-password "密码"
youtube_transcript_api VIDEO_ID \ --http-proxy http://user:pass@domain:port \ --https-proxy https://user:pass@domain:port
youtube_transcript_api VIDEO_ID --cookies /path/to/cookies.txt
|
📄 6. 格式化输出
formatters 子模块提供了多种输出格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.formatters import JSONFormatter, TextFormatter, WebVTTFormatter, SRTFormatter
ytt_api = YouTubeTranscriptApi() transcript = ytt_api.fetch(video_id)
json_formatter = JSONFormatter() json_string = json_formatter.format_transcript(transcript, indent=2)
text_formatter = TextFormatter() text_string = text_formatter.format_transcript(transcript)
vtt_formatter = WebVTTFormatter() vtt_string = vtt_formatter.format_transcript(transcript)
srt_formatter = SRTFormatter() srt_string = srt_formatter.format_transcript(transcript)
with open('transcript.json', 'w', encoding='utf-8') as f: f.write(json_string)
|
⚠️ 7. 重要注意事项
- 非官方API:此库使用的是YouTube Web客户端使用的非公开API,可能在YouTube更新时失效。
- IP封锁:YouTube可能会封锁已知的云服务商IP,频繁使用或部署在云服务器上时,请考虑配置代理。
- 年龄限制:针对年龄限制视频的Cookie认证功能目前可能无法正常工作。
- 语言代码:语言代码遵循ISO 639-1标准(如
en、zh-Hans)。
🤝 8. 贡献与支持
- 贡献:欢迎提交Pull Request。请确保代码通过测试、覆盖率、格式化和Lint检查(可运行
poe precommit)。
- 赞助:如果这个项目对您有帮助,可以考虑成为赞助商以支持其维护。
按照以上步骤,您应该可以顺利部署并使用 youtube-transcript-api 来获取YouTube视频字幕了。祝您使用顺利!