'n PDF of prent kan suksesvol deur 'n proxy aankom en dan in die ban-opsporing misluk. Scrapy se basis-Response stel die body-bytes bloot, maar sy text-eienskap lewer die fout “Response content isn't text.”

As die geïnstalleerde scrapy-proxy-pool-beleid response.text onvoorwaardelik deursoek, vervang daardie beleid met 'n tipebewuste weergawe:

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

Kies dit deur die pakket se uitbreidingsinstelling:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Dit behou die beleid se status- en leë-liggaam-reëls en beperk die teksoektog tot response wat dit ondersteun. Die geërfde uitsonderingsbeleid bly ook beskikbaar.

Hersien ook daardie oorblywende reëls vir die toepassing: 'n doelbewus leë 200-response of 'n gewone bestemmingsfout is nie altyd bewys van 'n slegte proxy nie. Hou die middleware aktief en verander die klassifikasie wat die fout veroorsaak het, eerder as om alle ban-opsporing vir binêre aflaaie af te skakel.

Verwante artikels