scrapy-proxy-pool: håndtering af binære svar i bandetektering
Begræns scrapy-proxy-pools tekstmønsterkontrol til TextResponse, mens beslutninger om status og tom krop bevares.
En PDF eller et billede kan ankomme gennem en proxy og derefter fejle i bandetekteringen. Scrapys grundlæggende Response blotlægger body-bytene, men dens text-egenskab rejser fejlen “Response content isn't text.”
Hvis den installerede scrapy-proxy-pool-politik søger i response.text ubetinget, skal du erstatte den politik med en typebevidst version:
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
Vælg den via pakkens udvidelsesindstilling:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Det bevarer politikkens regler for status og tom krop, mens tekstsøgningen begrænses til svar, der understøtter den. Den nedarvede undtagelsespolitik er stadig tilgængelig.
Gennemgå også de resterende regler for applikationen: et bevidst tomt 200-svar eller en almindelig destinationsfejl er ikke altid bevis på en dårlig proxy. Behold middleware aktivt, og ændr den klassificering, der forårsagede fejlen, i stedet for at slå al banetektering fra for binære downloads.