PDF nebo obrázek může projít proxy úspěšně a poté selhat v detekci zákazů. Základní Response ve Scrapy zpřístupňuje bajty těla, ale jeho vlastnost text vyvolá chybu “Response content isn't text.”

Pokud nainstalovaná politika scrapy-proxy-pool prohledává response.text bezpodmínečně, nahraďte ji verzí, která 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 ji pomocí nastavení rozšíření balíčku:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Tím zůstávají zachována pravidla politiky pro stav a prázdné tělo, zatímco textové hledání se omezuje na odpovědi, které jej podporují. Zděděná politika výjimek zůstává také k dispozici.

Projděte tato zbývající pravidla i pro aplikaci: záměrně prázdná odpověď 200 nebo běžná chyba cíle ještě vždy nedokazuje špatný proxy. Ponechte middleware aktivní a změňte klasifikaci, která selhání způsobila, místo abyste pro binární stahování vypnuli veškerou detekci zákazů.

Související články