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 با مسیر import این زیرکلاس جایگزین کنید. IMAGES_STORE و سایر تنظیمات را نگه دارید.

فراخوانی کلاس والد، فیلد نشانی تصویر و callbackهای پیکربندی‌شده را حفظ می‌کند. زیرکلاس فقط مسیر درخواست را اضافه می‌کند که HttpProxyMiddleware فعال آن را مصرف می‌کند. هر نشانی تصویر مقصد خود باقی می‌ماند. درخواست‌های تازه تصاویر عمومی بدون اعتبارنامه پروکسی می‌توانند وقتی آن مسیر مجاز است از ورودی فهرست پروکسی HTTP استفاده کنند.

درخواست‌های صفحه سیاست خودشان را نگه می‌دارند. با محیط پروکسی سراسری، meta={'proxy': None} در این نسخه یک درخواست صفحه انتخاب‌شده را مستقیم می‌کند.

بررسی کنید که دانلود واقعاً صادر شده باشد. برخورد به حافظه نهان خط لوله می‌تواند از یک درخواست شبکه جلوگیری کند. برای انتقال‌های تازه، ورودی‌های نتیجه تصویر تکمیل‌شده را با نشانی‌های درخواستی مقایسه کنید: عملیات موفق آنجا ظاهر می‌شوند، در حالی که خطاها می‌توانند فیلد نشانی تصویر اصلی را پر باقی بگذارند. نتایج گم‌شده را از طریق گزارش‌های دانلودر و پروکسی انتخابی ردیابی کنید.

مقالات مرتبط