scrapy-proxy-pool: xestionar respostas binarias na detección de bloqueos
Limita a comprobación de patróns de texto de scrapy-proxy-pool a TextResponse mantendo as decisións de estado e corpo baleiro.
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.