from scrapy.pipelines.images import ImagesPipeline

class ProxiedImagesPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for request in super().get_media_requests(item, info):
            request.meta['proxy'] = 'http://proxy.example:8080'
            yield request

Per Scrapy 2.13.3, sostituisci la voce ImagesPipeline standard in ITEM_PIPELINES con il percorso di import di questa sottoclasse. Mantieni IMAGES_STORE e le altre impostazioni.

La chiamata al genitore conserva il campo URL dell'immagine e i callback configurati. La sottoclasse aggiunge solo la rotta della richiesta, che HttpProxyMiddleware abilitato consuma. Ogni URL di immagine resta la sua destinazione. Le nuove richieste di immagini pubbliche senza credenziali proxy possono usare una voce dall'elenco di proxy HTTP quando quella rotta è consentita.

Le richieste di pagina mantengono la propria politica. Con un ambiente proxy globale, meta={'proxy': None} rende diretta una richiesta di pagina selezionata in questa versione.

Verifica che un download sia stato realmente emesso. Un successo della cache della pipeline può evitare una richiesta di rete. Per i nuovi trasferimenti, confronta le voci di risultato delle immagini completate con gli URL richiesti: le operazioni riuscite compaiono lì, mentre i fallimenti possono lasciare compilato il campo URL dell'immagine originale. Traccia i risultati mancanti tramite i log del downloader e il proxy scelto.

Articoli correlati