Прикачете проксито към заявките за изображения на Scrapy
Украсете Requests, създавани от ImagesPipeline, така че изтеглянията на изображения да получават прокси, без да се преработва логиката на заявките в конвейера.
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
За Scrapy 2.13.3 заменете стандартния запис на ImagesPipeline в ITEM_PIPELINES с пътя за импорт на този подклас. Запазете IMAGES_STORE и другите настройки.
Извикването на родителя запазва конфигурираното поле за URL на изображението и обратните връзки. Подкласът добавя само маршрута на заявката, който включеният HttpProxyMiddleware консумира. Всеки URL на изображение остава неговата дестинация. Нови заявки за публични изображения без прокси идентификационни данни могат да използват запис от списъка с HTTP прокси, когато този маршрут е разрешен.
Заявките за страници запазват собствената си политика. При глобална прокси среда meta={'proxy': None} прави избраната заявка за страница директна в тази версия.
Проверете дали изтеглянето наистина е издадено. Попадане в кеша на конвейера може да избегне мрежова заявка. За нови трансфери сравнете записите с резултати за завършени изображения с поисканите URL адреси: успешните операции се появяват там, докато неуспехите могат да оставят оригиналното поле за URL на изображението попълнено. Проследявайте липсващите резултати чрез логовете на изтеглящия и избраното прокси.