Egy PDF vagy kép sikeresen megérkezhet egy proxyn keresztül, majd elbukhat a tiltásfelismerésben. A Scrapy alap Response osztálya feltárja a törzs bájtjait, de a text tulajdonsága „Response content isn't text.” hibát dob.

Ha a telepített scrapy-proxy-pool szabály feltétel nélkül keresi a response.text tartalmát, cserélje le azt egy típustudatos változatra:

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

Válassza ki a csomag bővítménybeállításán keresztül:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Ez megtartja a szabály státusz- és üres törzsre vonatkozó rendelkezéseit, a szöveges keresést pedig az azt támogató válaszokra korlátozza. Az örökölt kivételszabály továbbra is elérhető.

Tekintse át ezeket a fennmaradó szabályokat az alkalmazás szempontjából is: egy szándékosan üres 200-as válasz vagy egy szokásos célhiba nem mindig bizonyít rossz proxyt. Tartsa aktívan a middleware-t, és módosítsa a hibát okozó besorolást, ahelyett hogy kikapcsolná a teljes tiltásfelismerést a bináris letöltéseknél.

Kapcsolódó cikkek