Un PDF o una imagen pueden llegar correctamente a través de un proxy y luego fallar dentro de la detección de bloqueos. El Response base de Scrapy expone los bytes del cuerpo, pero su propiedad text lanza el error “Response content isn't text.”

Si la política instalada de scrapy-proxy-pool busca response.text sin condiciones, sustituye esa política por una versión consciente del 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ónala mediante el ajuste de extensión del paquete:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Esto conserva las reglas de estado y cuerpo vacío de la política y limita la búsqueda de texto a las respuestas que la admiten. La política de excepciones heredada sigue disponible.

Revisa también esas reglas restantes para la aplicación: una respuesta 200 vacía de forma intencionada o un error de destino habitual no siempre demuestran un proxy defectuoso. Mantén el middleware activo y cambia la clasificación que provocó el fallo, en lugar de desactivar toda la detección de bloqueos para descargas binarias.

Artículos relacionados