scrapy-proxy-pool: obrada binarnih odgovora u otkrivanju zabrana
Ograničite provjeru tekstualnog uzorka u scrapy-proxy-pool na TextResponse, uz zadržavanje odluka o statusu i praznom tijelu.
PDF ili slika mogu uspješno stići kroz proxy, a zatim pasti u otkrivanju zabrana. Osnovni Response u Scrapyju izlaže bajtove tijela, ali njegovo svojstvo text podiže grešku “Response content isn't text.”
Ako instalirana politika scrapy-proxy-pool pretražuje response.text bezuslovno, zamijenite tu politiku verzijom koja vodi računa o tipu:
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
Odaberite je kroz postavku proširenja paketa:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Time se zadržavaju pravila politike o statusu i praznom tijelu, dok se tekstualna pretraga ograničava na odgovore koji je podržavaju. Naslijeđena politika izuzetaka takođe ostaje dostupna.
Pregledajte i ta preostala pravila za aplikaciju: namjerno prazan odgovor 200 ili obična greška odredišta nije uvijek dokaz lošeg proxyja. Ostavite middleware aktivan i promijenite klasifikaciju koja je izazvala kvar, umjesto da isključite cijelo otkrivanje zabrana za binarne preuzimanja.