
1. middlewares.py
import itertools, random
class RotatingProxyMiddleware:
def __init__(self):
with open("proxies.txt") as handle:
self.proxies = [line.strip() for line in handle if line.strip()]
random.shuffle(self.proxies)
self.pool = itertools.cycle(self.proxies)
def process_request(self, request, spider):
request.meta["proxy"] = f"http://{next(self.pool)}"2. settings.py
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.RotatingProxyMiddleware": 350,
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
}
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 10시간을 아껴 주는 참고 사항
순서가 중요합니다. 프록시 미들웨어는 재시도 미들웨어보다 먼저 실행돼야 각 재시도가 실패한 것을 반복하지 않고 새 프록시를 고릅니다. DOWNLOAD_TIMEOUT은 낮게 — 무료 프록시가 파이프라인에서 가장 느린 부분입니다 — 그리고 실패율을 흡수하도록 RETRY_TIMES를 높이세요.
관련 가이드
공개 스냅샷 이용 범위
무료 공개 프록시는 알 수 없는 주체가 운영하며 공유됩니다. 비밀번호, 토큰, 개인정보를 전송하지 마세요. GitHub 이용 정책에 따라 스팸, 공격, 접근 제어 우회, 사이트 정책에 어긋나는 수집에 사용하지 마세요.
무료 공개 프록시는 알 수 없는 주체가 운영하며 공유됩니다. 비밀번호, 토큰, 개인정보를 전송하지 마세요. GitHub 이용 정책에 따라 스팸, 공격, 접근 제어 우회, 사이트 정책에 어긋나는 수집에 사용하지 마세요.