Adjunta el proxy a las solicitudes de imagen de Scrapy
Decora los Requests que crea ImagesPipeline para que las descargas de imágenes reciban un proxy sin reconstruir la lógica de solicitudes del 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
Para Scrapy 2.13.3, sustituye la entrada estándar de ImagesPipeline en ITEM_PIPELINES por la ruta de importación de esta subclase. Conserva IMAGES_STORE y los demás ajustes.
Llamar al padre preserva su campo de URL de imagen y sus callbacks configurados. La subclase solo añade la ruta de solicitud, que consume HttpProxyMiddleware habilitado. Cada URL de imagen sigue siendo su destino. Las solicitudes nuevas de imágenes públicas sin credenciales de proxy pueden usar una entrada de la lista de proxies HTTP cuando se permite esa ruta.
Las solicitudes de página mantienen su propia política. Con un entorno de proxy global, meta={'proxy': None} hace directa una solicitud de página seleccionada en esta versión.
Comprueba que la descarga se haya emitido realmente. Un acierto de la caché del pipeline puede evitar una solicitud de red. Para transferencias nuevas, compara las entradas de resultado de imagen completada con las URL solicitadas: las operaciones correctas aparecen ahí, mientras que los fallos pueden dejar el campo de URL de imagen original relleno. Rastrea los resultados ausentes en los registros del descargador y en el proxy elegido.