scrapy-proxy-pool: tratar respostas binárias na detecção de bloqueios
Restrinja a verificação de padrões de texto do scrapy-proxy-pool a TextResponse, mantendo as decisões de status e corpo vazio.
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.