Um PDF ou uma imagem pode chegar corretamente através de um proxy e depois falhar dentro da detecção de bloqueios. O Response base do Scrapy expõe os bytes do corpo, mas a sua propriedade text gera o erro «Response content isn't text.»

Se a política instalada do scrapy-proxy-pool procura response.text sem condições, substitua essa política por uma versão consciente do tipo:

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

Selecione-a através da configuração de extensão do pacote:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Isto mantém as regras de status e corpo vazio da política e limita a busca textual às respostas que a suportam. A política de exceções herdada continua disponível.

Reveja também essas regras restantes para a aplicação: uma resposta 200 deliberadamente vazia ou um erro de destino comum nem sempre provam um proxy ruim. Mantenha o middleware ativo e altere a classificação que causou a falha, em vez de desativar toda a detecção de bloqueios para downloads binários.

Artigos relacionados