HomeBlogTranscribePlansAPI Keys

youtube-transcript-api 차단됨? AWS/GCP에서 IP 차단 해결하기

클라우드 서버에서 실행 중인 youtube-transcript-api의 IpBlocked 오류를 나타내는 Python 추적

스크립트는 몇 주 동안 랩톱에서 완벽하게 실행되었습니다. 그다음 배포했습니다. 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의 트래픽에 일괄 이의를 제기합니다. 하루에 3개의 요청을 만들고 있다는 사실은 중요하지 않습니다. 차단은 네트워크 동네에 있지 동작이 아닙니다. 인스턴스를 재부팅하고 새 탄력적 IP를 얻고 함수를 재배포하면 같은 차단된 풀의 다른 주소에 착륙합니다.

이것을 내재화할 가치가 있습니다. 첫 번째 본능 (재시도 추가, 지연 추가, 사용자 에이전트 회전)이 도움이 되지 않기 때문입니다. YouTube가 키를 누르고 있는 신호는 패킷이 어디서 오는지입니다.

해결책 1: 자신의 주거용 프록시 실행

라이브러리는 이것을 직접 지원합니다. WebshareProxyConfig와 모든 제공자를 위한 GenericProxyConfig가 함께 제공됩니다. 주거용 IP를 통해 요청을 라우팅하면 차단이 대부분 멈춥니다. 진정한 작동입니다. YouTube를 규모로 스크래핑하는 모든 사람이 생존하는 방법입니다.

정직한 비용 회계:

다른 스크래핑을 위해 프록시 인프라를 이미 실행 중이면 이를 추가하는 것이 합리적입니다. 스크립트가 필요한 유일한 것이면 한 함수 호출을 지원하기 위해 프록시 플릿을 운영하기로 가입하고 있습니다.

해결책 2: 이미 이 전투를 벌이는 엔드포인트 호출

youtube2text.org는 주거용 프록시 회전을 서버 측에서 수행하므로 클라우드 함수는 정상 API에 대한 하나의 지루한 HTTPS 요청을 만듭니다. 마이그레이션은 거의 찾기 및 바꾸기입니다.

이전:

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 연습이 있습니다.

어떤 해결책이 적합한가

자신의 키 (공유 데모 할당량과 별도)는 youtube2text.org/app/keys에서 Google 로그인을 합니다. 무료 계층은 월 5개 비디오입니다. 월 50개 비디오는 $5.99부터 무제한 $19.99까지입니다. 무료 계층에는 전화 번호나 카드가 없습니다.