Blir youtube-transcript-api blokkert? Fiks IP-utestengelser på AWS/GCP

Skriptet kjørte perfekt på laptopen din i ukevis. Så deployet du det — Lambda, en EC2-boks, Cloud Run, en Heroku-dyno, spiller ingen rolle — og hvert eneste kall til youtube-transcript-api dør nå med noe sånt som:
youtube_transcript_api._errors.IpBlocked:
Could not retrieve a transcript for the video ...
YouTube is blocking requests from your IP.
Eller nettleser-varianten av samme vegg: «Sign in to confirm you're not a bot.» Ingenting i koden din er endret. Biblioteket er ikke ødelagt. IP-adressen din er problemet.
Hvorfor det bare ryker i produksjon
youtube-transcript-api fungerer ved å hente undertekstdata på samme måte som YouTube-spilleren gjør — ingen API-nøkkel, bare HTTP-forespørsler til YouTube. YouTube tolererer dette fra private hjemmeforbindelser, og derfor føles lokal utvikling helt fin. Men IP-områdene til AWS, GCP, Azure og Heroku er offentlig kjent, og YouTube utfordrer trafikk fra de ASN-ene over en lav sko. Det spiller ingen rolle at du gjør tre forespørsler om dagen; blokkeringen gjelder nettverksnabolaget, ikke oppførselen din. Restart instansen, få en ny elastisk IP, redeploy funksjonen — du lander på en annen adresse fra samme blokkerte pool.
Dette er verdt å ta innover seg, for den første innskytelsen (legg til retries, legg til pauser, roter user agents) hjelper ikke. Signalet YouTube styrer etter, er hvor pakkene kommer fra.
Fiks 1: kjør dine egne residential proxies
Biblioteket støtter dette direkte — det leveres med WebshareProxyConfig og en GenericProxyConfig for enhver leverandør. Rut forespørslene gjennom residential-IP-er, så stopper blokkeringene stort sett. Det fungerer genuint; det er slik alle som skraper YouTube i stor skala overlever.
Det ærlige kostnadsregnskapet, derimot:
- Penger: residential-båndbredde koster grovt sett $3–8/GB avhengig av leverandør, og anstendige leverandører vil ha månedlige forpliktelser — realistisk sett $30–100/måned før du har hentet noe som helst. Hver transkripsjonshenting er liten (noen hundre KB), så båndbredden er ikke smerten; minimumsbeløpene og konto-administrasjonen er det.
- Ingeniørarbeid: du eier rotasjon, retry-ved-utestengelse-logikk og overvåking. Residential-IP-er blir også utfordret, bare sjeldnere, så du må fortsatt oppdage feil og rute om.
- Løpende oppmerksomhet: YouTube endrer ting. Proxy-oppsett som fungerte i mars, trenger pleie i juni.
Kjører du allerede proxy-infrastruktur for annen skraping, er det rimelig å koble dette på. Er transkripsjoner det eneste du trenger, melder du deg på å drifte en proxy-flåte for å støtte ett funksjonskall.
Fiks 2: kall et endepunkt som allerede kjemper denne kampen
youtube2text.org gjør residential-proxy-rotasjonen på serversiden, så skyfunksjonen din gjør én kjedelig HTTPS-forespørsel til et vanlig API. Migreringen er nesten en søk-og-erstatt.
Før:
from youtube_transcript_api import YouTubeTranscriptApi
transcript = YouTubeTranscriptApi().fetch(video_id)
text = " ".join(snippet.text for snippet in transcript)
Etter:
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"]
For å prøve det før du oppretter en konto, hent den delte demonøkkelen — curl -s https://youtube2text.org/api/demo-key — som tillater 5 videoer/måned per IP. Feil kommer tilbake som strukturert JSON med koder verdt å håndtere: TRANSCRIPT_UNAVAILABLE (404) betyr at videoen faktisk ikke har undertekster — ikke en blokkering, og ingen proxy kan fikse det; RATE_LIMIT_EXCEEDED (429) inkluderer et retry-hint. Det finnes en grundigere Python-gjennomgang i Python-integrasjonsguiden.
Hvilken fiks er riktig for deg
- Bli på youtube-transcript-api + egne proxies hvis du henter tusenvis av transkripsjoner daglig, allerede har proxy-kontoer og har noen som eier oppsettet. På det volumet kan per-GB-prising slå per-video-prising.
- Bytt til et hostet endepunkt hvis transkripsjoner er en funksjon, ikke produktet ditt. Ett HTTP-kall, JSON ut, og blokkeringsproblemet er noen andres vaktbeeper.
- Ingen av delene fikser manglende undertekster. For videoer som returnerer
TRANSCRIPT_UNAVAILABLE, er fallbacken tale-til-tekst — se Whisper vs YouTube-undertekster for når det er verdt kostnaden. Og hvis du var i ferd med å prøve yt-dlp i stedet, vær klar over at det treffer den samme IP-blokkeringen fra datasenteradresser.
Din egen nøkkel (adskilt fra den delte demokvoten) krever en Google-innlogging på youtube2text.org/app/keys — gratisnivået er 5 videoer/måned, betalte planer fra $5.99/måned for 50 videoer opp til $19.99 ubegrenset. Ikke noe telefonnummer, ikke noe kort for gratisnivået.