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

Ersetzen Sie für Scrapy 2.13.3 den Standardeintrag von ImagesPipeline in ITEM_PIPELINES durch den Importpfad dieser Unterklasse. Behalten Sie IMAGES_STORE und weitere Einstellungen bei.

Der Aufruf der Elternklasse erhält das konfigurierte Bild-URL-Feld und die Callbacks. Die Unterklasse ergänzt nur die Anfrage-Route, die die aktivierte HttpProxyMiddleware nutzt. Jede Bild-URL bleibt ihr Ziel. Neue Anfragen für öffentliche Bilder ohne Proxy-Anmeldedaten können einen Eintrag aus der HTTP-Proxy-Liste verwenden, wenn diese Route erlaubt ist.

Seitenanfragen behalten ihre eigene Richtlinie. Mit einer globalen Proxy-Umgebung macht meta={'proxy': None} eine ausgewählte Seitenanfrage in dieser Version direkt.

Prüfen Sie, ob ein Download tatsächlich ausgelöst wurde. Ein Pipeline-Cachetreffer kann eine Netzwerkanfrage vermeiden. Vergleichen Sie bei neuen Übertragungen die Ergebniseinträge abgeschlossener Bilder mit den angeforderten URLs: erfolgreiche Vorgänge erscheinen dort, während Fehler das ursprüngliche Bild-URL-Feld gefüllt lassen können. Verfolgen Sie fehlende Ergebnisse über Downloader-Protokolle und den gewählten Proxy.

Ähnliche Artikel