scrapy-proxy-pool : gérer les réponses binaires dans la détection de bannissement
Limitez le contrôle de motif textuel de scrapy-proxy-pool à TextResponse tout en conservant les décisions de statut et de corps vide.
Un PDF ou une image peut arriver correctement via un proxy puis échouer dans la détection de bannissement. La Response de base de Scrapy expose les octets du corps, mais sa propriété text lève l'erreur « Response content isn't text. »
Si la politique installée de scrapy-proxy-pool parcourt response.text sans condition, remplacez cette politique par une version qui tient compte du type :
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
Sélectionnez-la via le réglage d'extension du paquet :
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Cela conserve les règles de statut et de corps vide de la politique tout en limitant la recherche textuelle aux réponses qui la prennent en charge. La politique d'exception héritée reste disponible.
Examinez aussi ces règles restantes pour l'application : une réponse 200 volontairement vide ou une erreur de destination ordinaire ne prouve pas toujours un mauvais proxy. Gardez le middleware actif et modifiez la classification à l'origine de l'échec, plutôt que de désactiver toute la détection de bannissement pour les téléchargements binaires.