scrapy-proxy-pool: trakti binariajn respondojn en blokdetekto
Limigu la tekstŝablonan kontrolon de scrapy-proxy-pool al TextResponse, konservante decidojn pri statuso kaj malplena korpo.
PDF aŭ bildo povas sukcese alveni tra prokura servilo kaj poste malsukcesi en blokdetekto. La baza Response de Scrapy montras la bajtojn de la korpo, sed ĝia eco text lanĉas la eraron “Response content isn't text.”
Se la instalita politiko de scrapy-proxy-pool serĉas response.text senkondiĉe, anstataŭigu tiun politikon per tipo-konscia versio:
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
Elektu ĝin per la etenda agordo de la pako:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Tio konservas la regulojn de la politiko pri statuso kaj malplena korpo, dum la teksta serĉo limiĝas al respondoj, kiuj subtenas ĝin. La heredita escepta politiko restas disponebla.
Rigardu ankaŭ tiujn ceterajn regulojn por la aplikaĵo: intence malplena respondo 200 aŭ ordinara cela eraro ne ĉiam pruvas malbonan prokuran servilon. Lasu la mezprogramaron aktiva kaj ŝanĝu la klasifikon, kiu kaŭzis la malsukceson, anstataŭ malŝalti la tutan blokdetekton por binariaj elŝutoj.