Een PDF of afbeelding kan via een proxy binnenkomen en daarna mislukken in de blokdetectie. De basis-Response van Scrapy toont de body-bytes, maar de text-eigenschap ervan werpt de fout “Response content isn't text.” op.

Als het geïnstalleerde scrapy-proxy-pool-beleid zonder voorwaarden in response.text zoekt, vervang dat beleid dan door een typebewuste versie:

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

Selecteer het via de extensie-instelling van het pakket:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Dit behoudt de status- en lege-bodyregels van het beleid en beperkt de tekstzoekopdracht tot reacties die dit ondersteunen. Het overgeërfde uitzonderingsbeleid blijft beschikbaar.

Loop ook die resterende regels voor de applicatie na: een bewust lege 200-reactie of een gewone bestemmingsfout is niet altijd bewijs van een slechte proxy. Houd de middleware actief en wijzig de classificatie die de fout veroorzaakte, in plaats van alle blokdetectie voor binaire downloads uit te schakelen.

Gerelateerde artikelen