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.

Articole similare