scrapy-proxy-pool: spracovanie binárnych odpovedí pri detekcii zákazov
Obmedzte kontrolu textových vzorov v scrapy-proxy-pool na TextResponse a zachovajte rozhodnutia o stave a prázdnom tele.
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.