PDF alebo obrázok môže úspešne prejsť cez proxy a potom zlyhať v detekcii zákazov. Základný Response v Scrapy sprístupňuje bajty tela, ale jeho vlastnosť text vyvolá chybu „Response content isn't text.“

Ak nainštalovaná politika scrapy-proxy-pool prehľadáva response.text bezpodmienečne, nahraďte ju verziou, ktorá rozlišuje typ:

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

Vyberte ju pomocou nastavenia rozšírenia balíka:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Tým zostávajú zachované pravidlá politiky pre stav a prázdne telo a textové hľadanie sa obmedzuje na odpovede, ktoré ho podporujú. Zdedená politika výnimiek zostáva tiež dostupná.

Prejdite aj tieto zostávajúce pravidlá pre aplikáciu: zámerne prázdna odpoveď 200 alebo bežná chyba cieľa ešte vždy nedokazuje zlý proxy. Ponechajte middleware aktívny a zmeňte klasifikáciu, ktorá zlyhanie spôsobila, namiesto vypnutia celej detekcie zákazov pre binárne sťahovania.

Súvisiace články