scrapy-proxy-pool: handsaming av binære svar i banregistrering
Avgrens tekstmønsterkontrollen i scrapy-proxy-pool til TextResponse, og behald avgjerder om status og tom kropp.
Ein PDF eller eit bilete kan kome gjennom ein proxy og deretter feile i banregistreringa. Basis-Response i Scrapy syner kroppsbyta, men text-eigenskapen reiser feilen «Response content isn't text.»
Viss den installerte scrapy-proxy-pool-policyen søkjer i response.text utan vilkår, byt ut policyen med ein typebevisst versjon:
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
Vel han via utvidingsinnstillinga i pakken:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Dette behald reglane for status og tom kropp i policyen, og avgrens tekstsøket til svar som støttar det. Den arva unntakspolicyen er framleis tilgjengeleg.
Gå også gjennom dei resterande reglane for applikasjonen: eit medvite tomt 200-svar eller ein vanleg destinasjonsfeil er ikkje alltid prov på ein dårleg proxy. La middleware vere aktivt og endre klassifiseringa som førte til feilen, i staden for å slå av all banregistrering for binære nedlastingar.