scrapy-proxy-pool: binäre Antworten in der Sperr-Erkennung behandeln
Beschränken Sie die Textmusterprüfung von scrapy-proxy-pool auf TextResponse und behalten Sie Status- und Leerbody-Entscheidungen bei.
Eine PDF oder ein Bild kann über einen Proxy erfolgreich ankommen und dann in der Sperr-Erkennung scheitern. Scrapys Basis-Response legt die Body-Bytes offen, aber ihre text-Eigenschaft löst „Response content isn't text.“ aus.
Wenn die installierte scrapy-proxy-pool-Richtlinie response.text bedingungslos durchsucht, ersetzen Sie diese Richtlinie durch eine typbewusste Variante:
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
Wählen Sie sie über die Erweiterungseinstellung des Pakets aus:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Das behält die Status- und Leerbody-Regeln der Richtlinie bei und beschränkt die Textsuche auf Antworten, die sie unterstützen. Die geerbte Ausnahmerichtlinie bleibt verfügbar.
Prüfen Sie auch die übrigen Regeln für die Anwendung: Eine absichtlich leere 200-Antwort oder ein gewöhnlicher Zielfehler ist nicht grundsätzlich ein Beweis für einen schlechten Proxy. Lassen Sie die Middleware aktiv und ändern Sie die Klassifizierung, die den Fehler verursacht hat, statt die gesamte Sperr-Erkennung für binäre Downloads abzuschalten.