Collega il proxy alle richieste di immagini di Scrapy
Decora le Requests create da ImagesPipeline così che i download di immagini ricevano un proxy senza ricostruire la logica delle richieste della pipeline.
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.