Scrapy에서 로테이팅 프록시 설정 방법
Scrapy의 내장 HttpProxyMiddleware는 request.meta에서 프록시를 읽어요. 회전 게이트웨이를 사용하면 하나의 URL만 설정해도 모든 요청에 새로운 IP가 할당돼요.
단계
- HttpProxyMiddleware 활성화 유지(기본값)
- 각 요청 또는 start_requests에서 meta={"proxy": url} 설정
- 프록시 URL에 사용자 이름과 비밀번호를 입력하세요
- 사이트에서 여전히 속도 제한이 걸리면 CONCURRENT_REQUESTS_PER_DOMAIN 값을 낮추세요
예제 코드
import scrapy
PROXY = "http://USERNAME-cc-gb:PASSWORD@gw.gbproxies.cc:10000"
class PricesSpider(scrapy.Spider):
name = "prices"
start_urls = ["https://example.com/catalog"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, meta={"proxy": PROXY})
def parse(self, response):
for href in response.css("a.product::attr(href)").getall():
yield response.follow(href, self.parse_item, meta={"proxy": PROXY})
def parse_item(self, response):
yield {"title": response.css("h1::text").get(), "url": response.url}프록시 콘솔의 Proxies 페이지에서 프록시 로그인 정보로 USERNAME과 PASSWORD를 입력하세요. 포트 10000은 residential HTTP용이에요. 각 제품의 포트는 아래에서 확인할 수 있어요.
팁
- 이미지 다운로드를 끄고 미디어 다운로드를 피해 GB를 절약하세요 (IMAGES_ENABLED off 설정)
- 안정적인 실행을 위해 DOWNLOAD_TIMEOUT 30과 RETRY_TIMES 3을 설정하세요
자주 묻는 질문
로테이션 미들웨어가 필요할까요?
아니요. 게이트웨이에서 자동으로 회전해 주기 때문에, 하나의 proxy URL로 충분해요.