Atașați proxy-ul la cererile de imagini din Scrapy
Decorați Requests create de ImagesPipeline astfel încât descărcările de imagini să primească un proxy fără a reconstrui logica cererilor conductei.
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.