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

Pro Scrapy 2.13.3 nahraďte standardní položku ImagesPipeline v ITEM_PIPELINES cestou importu této podtřídy. Zachovejte IMAGES_STORE a ostatní nastavení.

Volání rodiče zachovává nakonfigurované pole URL obrázku a zpětná volání. Podtřída přidává pouze trasu požadavku, kterou spotřebovává povolený HttpProxyMiddleware. Každá URL obrázku zůstává jejím cílem. Nové požadavky na veřejné obrázky bez přihlašovacích údajů k proxy mohou použít položku ze seznamu HTTP proxy, je-li tato trasa povolena.

Požadavky na stránky si zachovávají vlastní zásady. S globálním proxy prostředím činí meta={'proxy': None} vybraný požadavek na stránku v tomto vydání přímým.

Ověřte, že stahování skutečně proběhlo. Zásah do cache pipeline může síťovému požadavku zabránit. U nových přenosů porovnejte položky výsledků dokončených obrázků s požadovanými URL: úspěšné operace se tam objeví, zatímco selhání mohou nechat původní pole URL obrázku vyplněné. Chybějící výsledky sledujte v protokolech stahovače a ve zvolené proxy.

Související články