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

Pentru Scrapy 2.13.3, înlocuiți intrarea standard ImagesPipeline din ITEM_PIPELINES cu calea de import a acestei subclase. Păstrați IMAGES_STORE și celelalte setări.

Apelarea părinte păstrează câmpul URL de imagine și callback-urile configurate. Subclasa adaugă doar ruta cererii, pe care HttpProxyMiddleware activat o consumă. Fiecare URL de imagine rămâne destinația sa. Cererile noi pentru imagini publice fără acreditări de proxy pot folosi o intrare din lista de proxy HTTP atunci când ruta este permisă.

Cererile de pagină își păstrează propria politică. Cu un mediu proxy global, meta={'proxy': None} face directă o cerere de pagină selectată în această versiune.

Verificați dacă descărcarea a fost într-adevăr emisă. O lovitură în cache-ul conductei poate evita o cerere de rețea. Pentru transferuri noi, comparați intrările de rezultat ale imaginilor finalizate cu URL-urile solicitate: operațiile reușite apar acolo, în timp ce eșecurile pot lăsa câmpul URL al imaginii originale completat. Urmăriți rezultatele lipsă prin jurnalele descărcătorului și proxy-ul ales.

Articole similare