Proxy Rotator (프록시 순환기)
이 스킬은 스크래퍼가 여러 프록시에 요청을 분산하고, 죽은 프록시에 대한 반복적인 요청을 중단해야 할 때 사용합니다. 순환기는 다음 건강한 프록시를 할당하고, 실패 횟수를 추적하며, 특정 프록시가 너무 자주 실패하면 일정 시간(쿨다운) 동안 제외한 후 다시 기회를 부여합니다. 프록시 목록은 직접 제공해야 하며, 어떠한 프록시도 이 스킬에 포함되어 있지 않습니다.
호출 시점
- 사용자가 "프록시 순환", "프록시에 요청 분산", "IP 차단 방지", "다른 프록시로 재시도" 등을 요청할 때.
- 대화 중인 코드가 많은 수의 아웃바운드 요청을 수행하며, 이를 프록시 풀에 분산해야 할 때.
호출하지 말아야 할 때
- 단일 연결로 충분하거나, 대상 서버가 허용하는 트래픽 양을 초과하지 않을 때 - 프록시 순환은 불필요한 복잡성을 추가합니다.
- 명시적인 차단을 우회하거나 서비스를 남용하려는 의도일 때 - 대상의 이용 약관을 준수해야 합니다.
구체적인 예시
사용자 입력:
프록시 5개가 있습니다. 라운드 로빈 방식으로 순환하고, 실패하기 시작하는 프록시는 건너뛰세요.
출력:
import requests
from rotator import ProxyRotator
rot = ProxyRotator.from_env() # PROXY_POOL="http://h1:8080,socks5://h2:1080,..."
for url in urls:
p = rot.get() # 다음 건강한 프록시
try:
r = requests.get(url, proxies=p.as_dict(), timeout=15)
rot.report(p, ok=r.ok) # 결과를 피드백하여 풀이 자동 복구되도록 함
except Exception:
rot.report(p, ok=False) # 실패가 너무 많으면 쿨다운 동안 제외됨
적용 패턴
- 환경 변수 또는
.gitignore에 포함된 파일에서 프록시를 로드합니다. 실제 프록시 URL이나 자격 증명을 절대 커밋하지 마세요. - 각 요청 후 항상
report(proxy, ok=...)를 호출하여 실패한 프록시가 자동으로 제외되도록 합니다. max_fails와cooldown을 대상에 맞게 조정합니다. 짧은 쿨다운은 불안정한 프록시를 복구하고, 긴 쿨다운은 나쁜 프록시를 제외합니다.- 대규모 배치 전에
health_check를 실행하여 미리 죽은 프록시를 제외합니다. - "건강한 프록시 없음" 오류를 처리합니다. 실행을 중단하지 말고 백오프(back off) 후 재시도하세요.
참고: assets/rotator.py.
출처
저자의 자동화 프로젝트에서 실제 사용 경험을 바탕으로 정리되었습니다. v1.0.0. 참고: [[playwright-login-session]], [[pipeline-orchestrator]], [[cron-dispatch]].
→ Trawlkit으로 완전한 실행 가능 봇을 구축하세요.