scrapy-proxy-pool: håndtering av binære svar i banregistrering
Begrens tekstmønsterkontrollen i scrapy-proxy-pool til TextResponse, og behold beslutninger om status og tom kropp.
En PDF eller et bilde kan komme gjennom en proxy og deretter feile i banregistreringen. Scrapys basis-Response eksponerer kroppsbyttene, men text-egenskapen reiser feilen «Response content isn't text.»
Hvis den installerte scrapy-proxy-pool-policyen søker i response.text uten forbehold, erstatt den med en 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
Velg den via pakkens utvidelsesinnstilling:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Dette beholder policyens regler for status og tom kropp, og begrenser tekstsøket til svar som støtter det. Den arvede unntakspolicyen er fortsatt tilgjengelig.
Gå også gjennom de resterende reglene for applikasjonen: et bevisst tomt 200-svar eller en vanlig destinasjonsfeil er ikke alltid bevis på en dårlig proxy. La middleware være aktivt og endre klassifiseringen som forårsaket feilen, i stedet for å slå av all banregistrering for binære nedlastinger.