PDF나 이미지는 프록시를 통해 정상적으로 도착한 뒤 차단 감지 안에서 실패할 수 있습니다. Scrapy의 기본 Response는 본문 바이트를 노출하지만, text 속성은 “Response content isn't text.” 오류를 일으킵니다.

설치된 scrapy-proxy-pool 정책이 조건 없이 response.text를 검색한다면, 그 정책을 타입을 인식하는 버전으로 교체하십시오:

from scrapy.http import TextResponse
from scrapy_proxy_pool.policy import BanDetectionPolicy

class BinaryAwarePolicy(BanDetectionPolicy):
    def response_is_ban(self, request, response):
        if isinstance(response, TextResponse):
            if self.BANNED_PATTERN.search(response.text):
                return True
        if response.status not in self.NOT_BAN_STATUSES:
            return True
        return response.status == 200 and not response.body

패키지의 확장 설정으로 선택합니다:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

이렇게 하면 정책의 상태 및 빈 본문 규칙을 유지하면서 텍스트 검색을 이를 지원하는 응답으로만 제한합니다. 상속된 예외 정책도 계속 사용할 수 있습니다.

나머지 규칙도 애플리케이션에 맞게 검토하십시오. 의도적으로 비어 있는 200 응답이나 흔한 목적지 오류가 항상 나쁜 프록시의 증거는 아닙니다. 미들웨어를 활성 상태로 두고 실패를 일으킨 분류를 바꾸십시오. 바이너리 다운로드에 대해 차단 감지를 전부 끄지 마십시오.

관련 글