scrapy-proxy-pool: gestionarea răspunsurilor binare în detectarea blocărilor
Limitați verificarea modelelor de text din scrapy-proxy-pool la TextResponse, păstrând deciziile privind statusul și corpul gol.
Un PDF sau o imagine poate ajunge cu succes prin intermediul unui proxy și apoi poate eșua în detectarea blocărilor. Response de bază din Scrapy expune octeții corpului, dar proprietatea sa text ridică eroarea „Response content isn't text.”
Dacă politica instalată a scrapy-proxy-pool caută response.text fără condiții, înlocuiți-o cu o versiune conștientă de tip:
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
Selectați-o prin setarea de extensie a pachetului:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Aceasta păstrează regulile politicii privind statusul și corpul gol și limitează căutarea textului la răspunsurile care o acceptă. Politica de excepții moștenită rămâne disponibilă.
Revizuiți și aceste reguli rămase pentru aplicație: un răspuns 200 gol în mod intenționat sau o eroare obișnuită de destinație nu dovedesc întotdeauna un proxy prost. Lăsați middleware-ul activ și modificați clasificarea care a cauzat eșecul, în loc să dezactivați toată detectarea blocărilor pentru descărcările binare.