scrapy-proxy-pool: obsługa odpowiedzi binarnych w wykrywaniu blokad
Ogranicz sprawdzanie wzorców tekstu w scrapy-proxy-pool do TextResponse, zachowując decyzje o statusie i pustym ciele.
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.