Un PDF o una imatge poden arribar bé a través d'un proxy i després fallar dins la detecció de bloquejos. El Response base de Scrapy exposa els bytes del cos, però la seva propietat text llança l'error “Response content isn't text.”

Si la política instal·lada de scrapy-proxy-pool cerca response.text sense condicions, substituïu-la per una versió que tingui en compte el tipus:

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

Seleccioneu-la mitjançant la configuració d'extensió del paquet:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Això conserva les regles d'estat i de cos buit de la política i limita la cerca de text a les respostes que la suporten. La política d'excepcions heretada continua disponible.

Reviseu també aquestes regles restants per a l'aplicació: una resposta 200 buida intencionadament o un error de destinació corrent no sempre demostren un proxy dolent. Manteniu el middleware actiu i canvieu la classificació que va causar la fallada, en lloc de desactivar tota la detecció de bloquejos per a baixades binàries.

Articles relacionats