HomeBlogTranscribePlansAPI Keys

youtube-transcript-api Zablokowane? Naprawianie Banitów IP na AWS/GCP

Python traceback pokazujący błąd IpBlocked z youtube-transcript-api uruchomionego na serwerze w chmurze

Skrypt działał doskonale na Twoim laptopie przez tygodnie. Potem go wdrożyłeś — Lambda, instancja EC2, Cloud Run, dyno Heroku, bez znaczenia — a każdy pojedynczy wywołanie youtube-transcript-api teraz umiera z czymś takim:

youtube_transcript_api._errors.IpBlocked:
Could not retrieve a transcript for the video ...
YouTube is blocking requests from your IP.

Lub wersja przeglądarkowa tego samego muru: „Zaloguj się, aby potwierdzić, że nie jesteś botem". Nic w Twoim kodzie się nie zmieniło. Biblioteka nie jest uszkodzona. Twój adres IP jest problemem.

Dlaczego to się psuje tylko w produkcji

youtube-transcript-api działa przez pobieranie danych napisów w taki sam sposób, jak odtwarzacz YouTube — bez klucza API, tylko żądania HTTP do YouTube. YouTube toleruje to z połączeń domowych, dlatego lokalna rozwój czuje się świetnie. Ale zakresy IP AWS, GCP, Azure i Heroku są publiczną wiedzą, a YouTube blanketowo wyzwala ruch z tych ASN. Nie ma znaczenia, że robisz trzy żądania dziennie; blokada dotyczy sąsiedztwa sieciowego, a nie Twojego zachowania. Zrestartuj instancję, otrzymaj nowy elastyczny IP, ponownie wdrażaj funkcję — trafiasz na inny adres z tej samej zablokowanej puli.

Warto to zapamiętać, ponieważ pierwszy instynkt (dodaj ponowne próby, dodaj opóźnienia, obróć agentów użytkownika) nie pomaga. Sygnał, na który YouTube zwraca uwagę, to skąd pochodzą pakiety.

Naprawa 1: uruchom własne serwery proxy mieszkalne

Biblioteka obsługuje to bezpośrednio — wysyła WebshareProxyConfig i GenericProxyConfig dla dowolnego dostawcy. Kieruj żądania przez mieszkalne IP, a blokady w większości się zatrzymują. To naprawdę działa; to jak wszyscy, którzy skrobią YouTube na dużą skalę przetrwają.

Szczera kalkulacja kosztów, choć:

Jeśli już prowadzisz infrastrukturę proxy dla innego scrapingu, przyczepianie tego jest rozsądne. Jeśli transkrypcje to jedyna rzecz, której potrzebujesz, podpisujesz się do obsługi floty proxy, aby wspierać jedno wywołanie funkcji.

Naprawa 2: zadzwoń do punktu końcowego, który już walczy z tą bitwą

youtube2text.org robi rotację serwera proxy mieszkalnego po stronie serwera, więc Twoja funkcja chmury robi jedno nudne żądanie HTTPS do normalnego API. Migracja to prawie find-and-replace.

Przed:

from youtube_transcript_api import YouTubeTranscriptApi

transcript = YouTubeTranscriptApi().fetch(video_id)
text = " ".join(snippet.text for snippet in transcript)

Po:

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"]

Aby spróbować przed utworzeniem konta, weź wspólny klucz demo — curl -s https://youtube2text.org/api/demo-key — co pozwala na 5 filmów/miesiąc na IP. Błędy wracają jako ustrukturyzowany JSON z kodami wartymi obsługi: TRANSCRIPT_UNAVAILABLE (404) oznacza, że film naprawdę nie ma napisów — nie blokadę, i żaden proxy tego nie naprawi; RATE_LIMIT_EXCEEDED (429) zawiera wskazówkę ponowienia próby. Jest pełny przewodnik Python w przewodniku integracji Python.

Która naprawa jest dla Ciebie odpowiednia

Twój własny klucz (oddzielny od wspólnego démokwota) wymaga logowania Google na youtube2text.org/app/keys — bezpłatny poziom to 5 filmów/miesiąc, plany płatne od 5,99 USD/miesiąc za 50 filmów do 19,99 USD bez limitu. Brak numeru telefonu, brak karty dla bezpłatnego poziomu.