
1. 실패 추적이 있는 순환
import collections, itertools, requests
proxies = [l.strip() for l in open("proxies.txt") if l.strip()]
failures = collections.Counter()
pool = itertools.cycle(proxies)
def get(url, attempts=10):
for _ in range(attempts):
proxy = next(pool)
if failures[proxy] >= 3:
continue
try:
return requests.get(
url,
proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"},
timeout=8,
)
except requests.RequestException:
failures[proxy] += 1
raise RuntimeError("pool exhausted")시간을 아껴 주는 참고 사항
프록시별 실패 횟수를 세고 반복 실패자를 건너뛰는 것이 원시 목록을 쓸 만한 풀로 바꾸는 핵심입니다. 그렇지 않으면 같은 죽은 항목의 타임아웃을 계속 치릅니다. 게시 주기에 맞춰 파일을 갱신하고 그때 카운터도 초기화하세요. 이 실패율을 감당할 수 없는 운영 환경이라면 관리되는 로테이션 엔드포인트가 더 나은 도구입니다.
관련 가이드
공개 스냅샷 이용 범위
무료 공개 프록시는 알 수 없는 주체가 운영하며 공유됩니다. 비밀번호, 토큰, 개인정보를 전송하지 마세요. GitHub 이용 정책에 따라 스팸, 공격, 접근 제어 우회, 사이트 정책에 어긋나는 수집에 사용하지 마세요.
무료 공개 프록시는 알 수 없는 주체가 운영하며 공유됩니다. 비밀번호, 토큰, 개인정보를 전송하지 마세요. GitHub 이용 정책에 따라 스팸, 공격, 접근 제어 우회, 사이트 정책에 어긋나는 수집에 사용하지 마세요.