프록시를 통한 Scrapy AutoThrottle: 슬롯과 지연 시간
대상 사이트의 다운로드 슬롯을 프록시 경로와 분리하고 지연 시간을 관측된 요청 경로로 해석하세요.
기본적으로 Scrapy는 요청 URL의 도메인을 기준으로 다운로드 슬롯을 할당합니다. 요청에 HTTP 프록시를 지정해도 그 URL이 프록시의 호스트 이름으로 바뀌지는 않습니다. 따라서 서로 다른 사이트로 가는 요청은 하나의 중간자를 공유하면서도 서로 다른 슬롯을 유지할 수 있습니다.
AutoThrottle은 관측된 다운로드 지연 시간을 사용해 각 슬롯의 지연을 조정합니다. 표준 도메인별 동시성 한도와 최소 다운로드 지연은 그대로 적용됩니다.
알고리즘을 바꾸기 전에 그룹화를 확인하세요
사용자 정의 미들웨어가 request.meta["download_slot"]를 지정해 일반적인 슬롯 선택을 덮어쓸 수 있습니다. 일부 프록시 확장은 자체 그룹화를 사용합니다. 관련 없는 사이트가 하나의 제한기를 공유하는 것처럼 보이면 해당 설정을 확인하세요.
반대로 프록시마다 다른 슬롯을 할당하면 여러 프록시가 동시에 같은 대상에 접속할 수 있습니다. 이는 크롤러가 지켜야 할 사이트 전체 한도를 무력화할 수 있습니다. 보호하려는 리소스에 따라 슬롯 키를 선택하세요.
지연에는 사용한 경로가 포함됩니다
Scrapy는 요청을 보낸 시점부터 HTTP 헤더를 받을 때까지의 지연을 측정합니다. 프록시를 거치는 요청은 그 관측에 중간자의 대기열 및 전달 지연을 포함할 수 있습니다. AutoThrottle이 원본만의 처리 시간을 따로 얻는 것은 아닙니다.
동시성을 높인다고 해서 그 측정이 사이트를 분리해 주지는 않습니다. 대상에 대한 예의와 프록시 용량이 모두 중요할 때는 별도의 한도로 유지하세요. 공유 프록시는 대상 슬롯 전반에 걸친 추가 동시성 예산이 필요할 수 있으며, 각 대상은 자체 속도 정책을 유지합니다.