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 o Scrapy 2.13.3, substitua a entrada padrão do ImagesPipeline em ITEM_PIPELINES pelo caminho de importação desta subclasse. Mantenha IMAGES_STORE e as demais configurações.

Chamar o pai preserva o campo de URL da imagem e os callbacks configurados. A subclasse adiciona apenas a rota da solicitação, que o HttpProxyMiddleware habilitado consome. Cada URL de imagem continua sendo seu destino. Novas solicitações de imagens públicas sem credenciais de proxy podem usar uma entrada da lista de proxies HTTP quando essa rota é permitida.

As solicitações de página mantêm sua própria política. Com um ambiente de proxy global, meta={'proxy': None} torna direta uma solicitação de página selecionada nesta versão.

Verifique se o download foi realmente emitido. Um acerto de cache do pipeline pode evitar uma solicitação de rede. Para transferências novas, compare as entradas de resultado de imagem concluída com as URLs solicitadas: operações bem-sucedidas aparecem ali, enquanto falhas podem deixar o campo de URL da imagem original preenchido. Rastreie resultados ausentes nos logs do downloader e no proxy escolhido.

Artigos relacionados