Den Proxy an Scrapys Bildanfragen anhängen
Dekorieren Sie die von ImagesPipeline erzeugten Requests, damit Bilddownloads einen Proxy erhalten, ohne die Anfragelogik der Pipeline neu zu bauen.
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.