好的,這是一篇部落格文章,旨在向台灣讀者介紹 YouTube Transcript API。
YouTube字幕輕鬆Get!Python API讓你一鍵抓取、翻譯YouTube字幕,還能解決IP封鎖問題!
各位台灣的朋友,是不是常常覺得看YouTube影片想要做筆記,或是研究某些主題,但總是苦於沒有字幕可以複製貼上,或是想要翻譯成中文卻找不到工具呢?今天就要來介紹一個超實用的Python工具 – youtube-transcript-api
,讓你輕鬆搞定YouTube字幕!
什麼是 YouTube Transcript API?
簡單來說,youtube-transcript-api
是一個Python函式庫,它可以讓你用程式的方式抓取YouTube影片的字幕。而且它不只可以抓取手動上傳的字幕,連YouTube自動產生的字幕也能抓取!更棒的是,它還支援字幕翻譯,讓你不用再手動複製貼上到翻譯網站了!
更重要的是,這個工具不需要像其他基於Selenium的解決方案一樣啟動一個瀏覽器才能運作,速度更快更方便。
為什麼你需要 YouTube Transcript API?
- 方便做筆記、研究: 快速抓取字幕,方便整理重點、引用內容。
- 語言學習利器: 搭配翻譯功能,輕鬆學習外語。
- 內容分析好幫手: 分析影片內容,了解觀眾喜好、市場趨勢。
- 自動化工作流程: 將字幕資料應用於各種自動化任務,例如影片內容摘要、關鍵字提取等。
如何開始使用 YouTube Transcript API?
別擔心,即使你是Python初學者,也能輕鬆上手!
1. 安裝
首先,你需要安裝這個函式庫。打開你的終端機(Terminal)或命令提示字元(Command Prompt),輸入以下指令:
pip install youtube-transcript-api
2. 簡單範例:抓取字幕
安裝完成後,就可以開始使用了!以下是一個簡單的範例,示範如何抓取特定YouTube影片的英文字幕:
from youtube_transcript_api import YouTubeTranscriptApi
try:
transcript = YouTubeTranscriptApi.get_transcript("影片ID") #將影片ID換成實際ID
for entry in transcript:
print(f"{entry['start']} - {entry['duration']}: {entry['text']}")
except Exception as e:
print(f"發生錯誤:{e}")
請記得將 "影片ID"
替換成你想要抓取字幕的YouTube影片ID。影片ID通常是YouTube網址 https://www.youtube.com/watch?v=影片ID` 中
v=` 後面的一串字元。
3. 進階用法:指定語言、翻譯字幕
youtube-transcript-api
還有許多進階用法,例如:
- 指定語言: 如果影片有多種語言的字幕,你可以指定要抓取的語言。
from youtube_transcript_api import YouTubeTranscriptApi try: transcript = YouTubeTranscriptApi.get_transcript("影片ID", languages=['zh-TW', 'en']) # 首先抓取繁體中文,如果沒有再抓英文 for entry in transcript: print(f"{entry['start']} - {entry['duration']}: {entry['text']}") except Exception as e: print(f"發生錯誤:{e}")
- 翻譯字幕: 將字幕翻譯成其他語言。
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import JSONFormatter
import json
try:
transcript = YouTubeTranscriptApi.get_transcript("影片ID",languages=['en'])
formatter = JSONFormatter()
json_formatted = formatter.format_transcript(transcript)
data = json.loads(json_formatted) # 字串轉 JSON
# 這邊需要安裝 googletrans==4.0.0-rc1
from googletrans import Translator
translator = Translator()
for item in data:
item["text"] = translator.translate(item["text"], dest='zh-tw').text # 將英文翻譯成繁體中文
print (json.dumps(data, indent=4, ensure_ascii=False)) # 輸出成格式化的JSON格式
except Exception as e:
print(f"發生錯誤:{e}")
錯誤排除小技巧:
- 找不到字幕: 確認影片是否有提供字幕,以及你指定的語言是否可用。
- API錯誤:
youtube-transcript-api
使用的是YouTube非官方API,如果YouTube修改了API,可能會導致程式無法正常運作。請隨時關注函式庫的更新。 - 遇到
KeyError
錯誤: 有時候YouTube的字幕格式不一致,導致程式在解析字幕時出現錯誤。可以嘗試使用try...except
語法來捕捉錯誤,並跳過無法解析的字幕片段。
4. 使用CLI工具
除了在Python程式中使用,youtube-transcript-api
也提供了Command Line Interface (CLI) 工具,讓你直接在終端機中抓取字幕。
例如,要抓取影片ID為 dQw4w9WgXcQ
的英文字幕,可以使用以下指令:
youtube_transcript_api dQw4w9WgXcQ --languages en
更多CLI工具的使用方法,可以參考官方文件。
解決IP封鎖問題:使用Proxy
最近,YouTube開始封鎖一些雲端服務供應商的IP,導致程式在執行時可能會出現 RequestBlocked
或 IpBlocked
錯誤。為了避免這個問題,你可以使用Proxy。
1. 使用 Webshare (推薦)
youtube-transcript-api
整合了 Webshare 這個Proxy服務,讓你更容易設定Proxy。
首先,你需要註冊一個 Webshare帳戶,並購買 “Residential” Proxy方案。然後,在 Webshare Proxy Settings 頁面找到你的 “Proxy Username” 和 “Proxy Password”,並將它們填入以下程式碼:
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.proxies import WebshareProxyConfig
ytt_api = YouTubeTranscriptApi(
proxy_config=WebshareProxyConfig(
proxy_username="<你的Proxy Username>",
proxy_password="<你的Proxy Password>",
)
)
# 現在,所有使用 ytt_api 發出的請求都會透過 Webshare Proxy
ytt_api.get_transcript("影片ID")
2. 使用其他Proxy服務
如果你想使用其他Proxy服務,可以使用 GenericProxyConfig
類別:
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-custom-proxy.org:port",
https_url="https://user:pass@my-custom-proxy.org:port",
)
)
# 現在,所有使用 ytt_api 發出的請求都會透過你設定的 Proxy
ytt_api.get_transcript("影片ID")
重要提醒: 使用Proxy並不保證一定不會被封鎖,YouTube可能會封鎖Proxy的IP。因此,建議選擇可以輪換IP的Proxy服務,以提高穩定性。
字幕格式化
youtube-transcript-api
提供了多種字幕格式化工具,讓你將抓取到的字幕轉換成不同的格式,例如JSON、Text、WebVTT、SRT等。
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import JSONFormatter, TextFormatter, WebVTTFormatter, SRTFormatter
ytt_api = YouTubeTranscriptApi()
transcript = ytt_api.get_transcript("影片ID")
# 轉換成 JSON 格式
json_formatter = JSONFormatter()
json_formatted = json_formatter.format_transcript(transcript)
print(json_formatted)
# 轉換成 Text 格式
text_formatter = TextFormatter()
text_formatted = text_formatter.format_transcript(transcript)
print(text_formatted)
# 轉換成 WebVTT 格式
vtt_formatter = WebVTTFormatter()
vtt_formatted = vtt_formatter.format_transcript(transcript)
print(vtt_formatted)
# 轉換成 SRT 格式
srt_formatter = SRTFormatter()
srt_formatted = srt_formatter.format_transcript(transcript)
print(srt_formatted)
你也可以自訂字幕格式化工具,只需要繼承 Formatter
類別,並實作 format_transcript
方法即可。
開源專案,歡迎貢獻
youtube-transcript-api
是一個開源專案,歡迎大家一起來貢獻程式碼、回報問題、或是提供建議。
注意事項
youtube-transcript-api
使用的是YouTube非官方API,因此有可能因為YouTube修改API而失效。如果遇到問題,請隨時關注函式庫的更新,或是向開發者回報。
結語
youtube-transcript-api
是一個非常實用的工具,可以幫助你更方便地使用YouTube字幕。無論是做筆記、研究、學習語言,或是進行內容分析,它都能成為你的好幫手。趕快動手試試看吧!
希望這篇文章對你有幫助!如果你覺得這篇文章不錯,請分享給你的朋友,也歡迎在下方留言分享你的使用心得。
參考閱讀
https://github.com/jdepoix/youtube-transcript-api