Un PDF ou unha imaxe poden chegar correctamente a través dun proxy e despois fallar dentro da detección de bloqueos. O Response base de Scrapy expón os bytes do corpo, pero a súa propiedade text lanza o erro «Response content isn't text.»

Se a política instalada de scrapy-proxy-pool busca response.text sen condicións, substitúea por unha versión 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

Selecciónaa mediante a configuración de extensión do paquete:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Isto conserva as regras de estado e corpo baleiro da política e limita a busca de texto ás respostas que a admiten. A política de excepcións herdada segue dispoñible.

Revisa tamén esas regras restantes para a aplicación: unha resposta 200 baleira de forma intencionada ou un erro de destino habitual non sempre demostran un proxy defectuoso. Mantén o middleware activo e cambia a clasificación que provocou o fallo, en lugar de desactivar toda a detección de bloqueos para descargas binarias.

Artigos relacionados