PDF ar vaizdas gali sėkmingai atkeliauti per tarpinį serverį ir tada nepavykti blokavimo aptikime. Scrapy bazinis Response atskleidžia kūno baitus, bet jo savybė text iškelia klaidą „Response content isn't text.“

Jei įdiegta scrapy-proxy-pool taisyklė ieško response.text be sąlygų, pakeiskite ją tipą suprantančia versija:

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

Pasirinkite ją per paketo plėtinio nustatymą:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Taip išsaugomos taisyklės būsenos ir tuščio kūno nuostatos, o teksto paieška apribojama atsakymais, kurie ją palaiko. Paveldėta išimčių taisyklė taip pat lieka prieinama.

Peržiūrėkite ir šias likusias taisykles programai: tyčia tuščias 200 atsakymas ar įprasta paskirties klaida ne visada įrodo blogą tarpinį serverį. Palikite tarpinę programinę įrangą aktyvią ir pakeiskite klasifikaciją, sukėlusią gedimą, o ne išjunkite visą blokavimo aptikimą dvejetainiams atsisiuntimams.

Susiję straipsniai