Middleware proxy di Scrapy: valori restituiti Request e None
Restituisci il controllo dopo aver assegnato un proxy Scrapy invece di riprogrammare involontariamente la stessa richiesta prima di scaricarla.
L'indirizzo del proxy cambia nel registro. La destinazione non compare mai nel registro degli accessi del proxy. Verifica se il tuo middleware lascia che la richiesta raggiunga lo scaricatore.
Nel middleware dello scaricatore di Scrapy, restituire un Request significa riprogrammare quella richiesta. Non significa «continua a inviare questo oggetto con i metadati che ho appena modificato».
Per un selettore che sceglie solo un percorso, la forma importante è:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Questo frammento mostra la forma attuale dell'hook; usa l'interfaccia middleware supportata dalla versione di Scrapy installata. Il selettore deve restituire un endpoint valido e gestire esplicitamente un pool non disponibile. Una scansione pubblica che consente intermediari pubblici può attingere candidati HTTP dalla lista di proxy HTTP per quel valore di ritorno.
Restituire None lascia proseguire il resto del middleware delle richieste e lo scaricatore. Restituire un altro Request è utile quando sostituisci o ritenti intenzionalmente il lavoro, ma richiede un motivo e una condizione di uscita.
Un rotatore che restituisce ogni volta la stessa richiesta può eseguire ripetutamente il proprio codice di selezione senza mai stabilire una connessione alla destinazione. Aumentare i timeout o aprire più porte proxy non può riparare quel ciclo di flusso di controllo.
Esamina l'ingresso nel middleware, il comportamento di ritorno e il primo tentativo di rete reale come eventi separati. Una riga di registro che dice «proxy selezionato» dimostra solo che il selettore è stato eseguito. Non dimostra che sia stata inviata una richiesta con l'endpoint selezionato.