Python Scrapy에서 프록시 설정 및 IP 순환 방법
업데이트:
Scrapy의 비동기 Twisted 엔진은 우선순위 750에서 동작하는 내장 HttpProxyMiddleware를 제공하며, request.meta['proxy']에 지정된 http://user:pass@ip:port 형식의 문자열을 자동 파싱합니다. 우선순위 740에 10줄 내외의 커스텀 다운로더 미들웨어(Downloader Middleware)를 작성하기만 하면 스파이더가 대역폭 무제한 VinaProxy 고정 IP 풀을 자동으로 순환하며 수집할 수 있습니다.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1개 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1개 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
Scrapy 프록시 미들웨어 우선순위 및 동시성 제어 구성
내장 HttpProxyMiddleware가 우선순위 750에서 프록시 URL의 user:pass를 제거하고 Proxy-Authorization 헤더를 인코딩하므로, request.meta['proxy']를 지정하는 커스텀 미들웨어는 반드시 더 낮은 번호(예: 740)로 설정해야 합니다:
| Scrapy 설정 항목 | 권장 설정값 | 기술적 기능 및 목적 |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | 지정된 VinaProxy 프록시를 통해 요청을 라우팅 |
| 미들웨어 우선순위 | 740 (750 이전) | 내장 HttpProxyMiddleware가 인증 헤더를 안전하게 인코딩하도록 보장 |
CONCURRENT_REQUESTS_PER_IP | 2 ~ 4 | 프록시 IP당 동시 소켓 수를 제한하여 대상 사이트의 HTTP 429 차단 방지 |
AUTOTHROTTLE_ENABLED | True | 대상 서버의 응답 지연 시간에 맞춰 크롤링 간격을 동적으로 자동 조절 |
대규모 Scrapy 크롤링을 위한 모범 사례
- 미들웨어의
from_crawler()에서 VinaProxy 프록시 목록을 로드하고,process_request()내부에서request.meta['proxy'] = random.choice(self.proxies)를 통해 IP를 무작위 선택합니다 DOWNLOAD_DELAY = 1.0과 함께RANDOMIZE_DOWNLOAD_DELAY = True를 활성화하여 IP별 요청 주기가 인위적으로 보이지 않도록 구성하세요- 요청 실패 및 재시도(
429또는503) 시에는 해당 요청을 큐에 다시 넣기 전에 다른 프록시 IP를 배정합니다
단계별 안내
- 1
프록시 목록을 http://user:pass@ip:port 형식으로 변환
VinaProxy 프록시 목록을 당사의 프록시 형식 변환 도구에 입력하여 표준 URL 형식으로 일괄 변환합니다.
- 2
middlewares.py에 ProxyPoolMiddleware 구현
process_request(self, request, spider)를 정의하고request.meta['proxy'] = random.choice(self.proxies)를 지정합니다. - 3
settings.py에서 우선순위 740으로 미들웨어 등록
DOWNLOADER_MIDDLEWARES에'myproject.middlewares.ProxyPoolMiddleware': 740을 추가하고CONCURRENT_REQUESTS_PER_IP = 2를 설정합니다. - 4
scrapy shell 또는 크롤링 명령어로 검증
https://vinaproxy.com/api/my-ip로 테스트 요청을 실행하여 IP 순환 및 프록시 인증 정상 작동을 확인합니다.
자주 묻는 질문
커스텀 Scrapy 프록시 미들웨어를 우선순위 800으로 설정했을 때 실패한 이유는?
Scrapy의 내장 HttpProxyMiddleware는 우선순위 750에서 동작합니다. 미들웨어를 800(750 이후)으로 지정하면 URL 내의 user:pass가 Proxy-Authorization 헤더로 변환되지 않습니다. 반드시 750보다 앞선 값(예: 740)으로 지정해야 합니다.
Scrapy는 각 프록시 연결을 지속적으로 유지(Keep-Alive)하나요?
네. Twisted의 연결 풀이 각 프록시 엔드포인트에 대해 영구적인 TCP Keep-Alive 연결을 관리하므로 네트워크 부하를 줄여줍니다.
수백만 페이지 규모의 대용량 크롤링 시 데이터 트래픽 초과 비용이 발생하나요?
아닙니다. 모든 VinaProxy 전용 IPv4 및 고정 ISP 플랜은 월간 무제한 데이터 대역폭을 포함합니다.
무제한 고정 IP 풀로 Scrapy 크롤러 인프라를 확장하세요
글로벌 7개국 지원, 대량 발급 가능한 고품질 전용 IPv4 및 고정 ISP 프록시를 즉시 제공합니다.
Scrapy 프록시 구매