scrapy-proxy-pool: gestire le risposte binarie nel rilevamento dei blocchi
Limita il controllo dei pattern testuali di scrapy-proxy-pool a TextResponse mantenendo le decisioni su stato e corpo vuoto.
Un PDF o un'immagine possono arrivare correttamente attraverso un proxy e poi fallire dentro il rilevamento dei blocchi. La Response di base di Scrapy espone i byte del corpo, ma la sua proprietà text solleva l'errore «Response content isn't text.»
Se la politica installata di scrapy-proxy-pool cerca response.text senza condizioni, sostituitela con una versione consapevole del tipo:
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
Selezionala tramite l'impostazione di estensione del pacchetto:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Questo conserva le regole di stato e corpo vuoto della politica e limita la ricerca testuale alle risposte che la supportano. La politica di eccezione ereditata resta disponibile.
Esamina anche queste regole rimanenti per l'applicazione: una risposta 200 volutamente vuota o un normale errore di destinazione non sempre dimostrano un proxy difettoso. Mantieni attivo il middleware e cambia la classificazione che ha causato l'errore, invece di disattivare tutto il rilevamento dei blocchi per i download binari.