scrapy-proxy-pool: gestiona les respostes binàries en la detecció de bloquejos
Limiteu la comprovació de patrons de text de scrapy-proxy-pool a TextResponse mantenint les decisions d'estat i de cos buit.
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.