En PDF eller bild kan komma igenom en proxy och sedan misslyckas i bandetekteringen. Scrapys bas-Response exponerar kroppsbyten, men dess text-egenskap kastar felet ”Response content isn't text.”

Om den installerade scrapy-proxy-pool-policyn söker i response.text utan villkor, ersätt policyn med en typmedveten 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älj den via paketets tilläggsinställning:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Detta behåller policyns regler för status och tom kropp och begränsar textsökningen till svar som stöder den. Den ärvda undantagspolicyn finns fortfarande tillgänglig.

Gå också igenom de återstående reglerna för applikationen: ett avsiktligt tomt 200-svar eller ett vanligt destinationsfel är inte alltid bevis på en dålig proxy. Låt middleware vara aktivt och ändra den klassificering som orsakade felet, i stället för att stänga av all bandetektering för binära nedladdningar.

Relaterade artiklar