scrapy-proxy-pool: zpracování binárních odpovědí při detekci zákazů
Omezit kontrolu textových vzorů scrapy-proxy-pool na TextResponse a zachovat rozhodnutí o stavu a prázdném těle.
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ů.