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.

Articoli correlati