홈 / 사용 사례 / Scrapy
Scrapy용 무료 프록시
Scrapy는 request.meta['proxy']로 프록시를 기본 지원합니다. 매시간 검증되는 무료 목록과 작은 로테이션 미들웨어를 결합하세요.
로테이션 미들웨어
이 미들웨어를 프로젝트에 넣고 settings.py에서 활성화하세요. 검증된 목록을 한 번 불러와 요청마다 임의의 프록시를 지정하고, 프록시가 실패하면 다른 프록시로 재시도합니다.
# middlewares.py
import random, requests
class VerifiedProxyMiddleware:
LIST = "https://raw.githubusercontent.com/xyzs996/free-proxy-health-list/main/proxies/protocols/http/data.txt"
def __init__(self):
txt = requests.get(self.LIST, timeout=15).text
self.proxies = [f"http://{l.strip()}" for l in txt.splitlines() if l.strip()]
def process_request(self, request, spider):
request.meta["proxy"] = random.choice(self.proxies)
def process_exception(self, request, exception, spider):
request.meta["proxy"] = random.choice(self.proxies)
return request
# settings.py
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.VerifiedProxyMiddleware": 350,
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
RETRY_ENABLED = True
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 15
DOWNLOAD_DELAY = 1.0
팁
무료 프록시는 불안정하므로 RETRY_ENABLED를 켜고 RETRY_TIMES를 넉넉히 주세요. fast 하위 집합에서 시작하고 긴 크롤 사이에 목록을 다시 불러오세요. 항상 robots.txt를 준수하세요.
자주 묻는 질문
Scrapy에서 프록시 하나를 설정하려면?
request.meta['proxy'] = 'http://host:port'를 설정하거나 http_proxy를 export하세요.
Scrapy가 SOCKS5를 지원하나요?
기본 미들웨어는 HTTP를 처리합니다. SOCKS에는 외부 핸들러가 필요합니다.
목록은 어디서?
CDN에서 TXT나 JSON 검증 목록을 다운로드하세요. 매시간 다시 검사됩니다.