Приєднайте проксі до запитів зображень 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 зображення заповненим. Відстежуйте відсутні результати в журналах завантажувача та обраному проксі.