اتصال پروکسی به درخواستهای تصویر 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 با مسیر import این زیرکلاس جایگزین کنید. IMAGES_STORE و سایر تنظیمات را نگه دارید.
فراخوانی کلاس والد، فیلد نشانی تصویر و callbackهای پیکربندیشده را حفظ میکند. زیرکلاس فقط مسیر درخواست را اضافه میکند که HttpProxyMiddleware فعال آن را مصرف میکند. هر نشانی تصویر مقصد خود باقی میماند. درخواستهای تازه تصاویر عمومی بدون اعتبارنامه پروکسی میتوانند وقتی آن مسیر مجاز است از ورودی فهرست پروکسی HTTP استفاده کنند.
درخواستهای صفحه سیاست خودشان را نگه میدارند. با محیط پروکسی سراسری، meta={'proxy': None} در این نسخه یک درخواست صفحه انتخابشده را مستقیم میکند.
بررسی کنید که دانلود واقعاً صادر شده باشد. برخورد به حافظه نهان خط لوله میتواند از یک درخواست شبکه جلوگیری کند. برای انتقالهای تازه، ورودیهای نتیجه تصویر تکمیلشده را با نشانیهای درخواستی مقایسه کنید: عملیات موفق آنجا ظاهر میشوند، در حالی که خطاها میتوانند فیلد نشانی تصویر اصلی را پر باقی بگذارند. نتایج گمشده را از طریق گزارشهای دانلودر و پروکسی انتخابی ردیابی کنید.