Koppla proxyn till Scrapys bildförfrågningar
Dekorera de Requests som ImagesPipeline skapar så att bildnedladdningar får en proxy utan att bygga om pipelinens förfrågningslogik.
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
För Scrapy 2.13.3 ersätter du standardposten ImagesPipeline i ITEM_PIPELINES med den här underklassens importväg. Behåll IMAGES_STORE och andra inställningar.
Anropet av föräldern bevarar det konfigurerade bild-URL-fältet och återanropen. Underklassen lägger bara till förfrågningsvägen, som den aktiverade HttpProxyMiddleware använder. Varje bild-URL förblir sin destination. Nya förfrågningar för offentliga bilder utan proxy-uppgifter kan använda en post från HTTP-proxylistan när vägen är tillåten.
Sidförfrågningar behåller sin egen policy. Med en global proxy-miljö gör meta={'proxy': None} en vald sidförfrågan direkt i den här versionen.
Kontrollera att en nedladdning faktiskt skickades. En cacheträff i pipelinen kan undvika en nätverksförfrågan. För nya överföringar, jämför resultatposterna för slutförda bilder med de begärda URL:erna: lyckade åtgärder visas där, medan misslyckanden kan lämna det ursprungliga bild-URL-fältet ifyllt. Spåra saknade resultat via nedladdarens loggar och den valda proxyn.