En PDF eller et billede kan ankomme gennem en proxy og derefter fejle i bandetekteringen. Scrapys grundlæggende Response blotlægger body-bytene, men dens text-egenskab rejser fejlen “Response content isn't text.”

Hvis den installerede scrapy-proxy-pool-politik søger i response.text ubetinget, skal du erstatte den politik med en typebevidst version:

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

Vælg den via pakkens udvidelsesindstilling:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Det bevarer politikkens regler for status og tom krop, mens tekstsøgningen begrænses til svar, der understøtter den. Den nedarvede undtagelsespolitik er stadig tilgængelig.

Gennemgå også de resterende regler for applikationen: et bevidst tomt 200-svar eller en almindelig destinationsfejl er ikke altid bevis på en dårlig proxy. Behold middleware aktivt, og ændr den klassificering, der forårsagede fejlen, i stedet for at slå al banetektering fra for binære downloads.

Relaterede artikler