scrapy-proxy-pool: binaire reacties afhandelen in blokdetectie
Beperk de tekstpatrooncontrole van scrapy-proxy-pool tot TextResponse en behoud beslissingen over status en lege body.
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.