חיבור ה-proxy לבקשות התמונות של Scrapy
עטרו את ה-Requests ש-ImagesPipeline יוצר כך שהורדות תמונות יקבלו proxy בלי לבנות מחדש את לוגיקת הבקשות של ה-pipeline.
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 של תמונה נשארת היעד שלה. בקשות חדשות לתמונות ציבוריות בלי פרטי proxy יכולות להשתמש ברשומה מתוך רשימת ה-proxy של HTTP כאשר המסלול הזה מותר.
בקשות דפים שומרות על המדיניות שלהן. עם סביבת proxy גלובלית, meta={'proxy': None} הופך בקשת דף נבחרת לישירה בגרסה הזו.
בדקו שהורדה אכן נשלחה. פגיעת מטמון של ה-pipeline יכולה למנוע בקשת רשת. עבור העברות חדשות, השוו את רשומות התוצאה של תמונות שהושלמו לכתובות ה-URL שהתבקשו: פעולות מוצלחות מופיעות שם, ואילו כשלים יכולים להשאיר את שדה כתובת התמונה המקורי מלא. עקבו אחר תוצאות חסרות דרך יומני המוריד וה-proxy שנבחר.