PDF lub obraz może dotrzeć przez proxy i następnie zawieść w wykrywaniu blokad. Bazowy Response w Scrapy udostępnia bajty ciała, ale jego właściwość text zgłasza błąd „Response content isn't text.”

Jeśli zainstalowana polityka scrapy-proxy-pool bezwarunkowo przeszukuje response.text, zastąp ją wersją świadomą typu:

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

Wybierz ją przez ustawienie rozszerzenia pakietu:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Zachowuje to reguły polityki dotyczące statusu i pustego ciała, a wyszukiwanie tekstu ogranicza do odpowiedzi, które je obsługują. Odziedziczona polityka wyjątków pozostaje dostępna.

Przejrzyj także te pozostałe reguły pod kątem aplikacji: celowo pusta odpowiedź 200 lub zwykły błąd celu nie zawsze dowodzą złego proxy. Pozostaw middleware aktywny i zmień klasyfikację, która spowodowała błąd, zamiast wyłączać całe wykrywanie blokad dla pobierania binarnego.

Powiązane artykuły