כיצד להגדיר ולבצע רוטציית פרוקסי ב-Python Scrapy
Updated:
מנוע Twisted האסינכרוני של Scrapy כולל HttpProxyMiddleware מובנה (בעדיפות 750) שמפענח מחרוזות http://user:pass@ip:port המוקצות ל-request.meta['proxy']. כתיבת Downloader Middleware מותאם אישית בן 10 שורות בעדיפות 740 מאפשרת לספיידרים שלכם לבצע רוטציה אוטומטית בין כתובות IP סטטיות ללא הגבלה של VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40,000 ₫
- 5+ כתובות IP35,000 ₫
- 10+ כתובות IP25,000 ₫
- 20+ כתובות IP25,000 ₫
- 50+ כתובות IP25,000 ₫
- 100+ כתובות IP25,000 ₫
- 200+ כתובות IP25,000 ₫
- 500+ כתובות IP25,000 ₫
- 1000+ כתובות IP22,000 ₫
- 2000+ כתובות IP20,000 ₫
- 1 IP40,000 ₫
- 5+ כתובות IP35,000 ₫
- 10+ כתובות IP25,000 ₫
- 20+ כתובות IP25,000 ₫
- 50+ כתובות IP25,000 ₫
- 100+ כתובות IP25,000 ₫
- 200+ כתובות IP25,000 ₫
- 500+ כתובות IP25,000 ₫
- 1000+ כתובות IP22,000 ₫
- 2000+ כתובות IP20,000 ₫
סדר ה-Middleware והגדרות הבקשות המקבילות לפרוקסי ב-Scrapy
מכיוון ש-HttpProxyMiddleware פועל בסדר 750 כדי להסיר את user:pass מכתובת ה-URL של הפרוקסי ולקודד את כותרת ה-Proxy-Authorization, כל Middleware מותאם אישית שמגדיר את request.meta['proxy'] חייב לרוץ במספר נמוך יותר (למשל, 740):
| הגדרת Scrapy | ערך מומלץ | מטרה |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | מנתב את הבקשה דרך פרוקסי VinaProxy שצוין |
| עדיפות Middleware | 740 (לפני 750) | מבטיח ש-HttpProxyMiddleware יקודד את כותרת ה-user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 עד 4 | מגביל סוקטים מקבילים לכל כתובת IP של פרוקסי כדי למנוע שגיאות HTTP 429 |
AUTOTHROTTLE_ENABLED | True | מתאים באופן דינמי את השהיית הסריקה בהתבסס על זמני התגובה של שרת היעד |
שיטות מומלצות לסריקות Scrapy בנפח גבוה
- טענו את רשימת הפרוקסי של VinaProxy ב-
from_crawler()והקצוrequest.meta['proxy'] = random.choice(self.proxies)בתוךprocess_request() - הפעילו
RANDOMIZE_DOWNLOAD_DELAY = TrueלצדDOWNLOAD_DELAY = 1.0כדי שמרווחי הבקשות לכל IP לעולם לא ייראו רובוטיים - בניסיון חוזר (
429או503), בחרו פרוקסי אחר מהמאגר שלכם לפני החזרת הבקשה לתור
שלב אחר שלב
- 1
פרמטו את מאגר הפרוקסי שלכם לפורמט http://user:pass@ip:port
הדביקו את רשימת ה-VinaProxy שלכם אל Proxy Format Converter כדי לקבל מחרוזות URL.
- 2
צרו ProxyPoolMiddleware בקובץ middlewares.py
הגדירו את
process_request(self, request, spider)כדי להגדירrequest.meta['proxy'] = random.choice(self.proxies). - 3
רשמו בעדיפות 740 בקובץ settings.py
הוסיפו את
'myproject.middlewares.ProxyPoolMiddleware': 740תחתDOWNLOADER_MIDDLEWARESוהגדירוCONCURRENT_REQUESTS_PER_IP = 2. - 4
בדקו באמצעות scrapy shell או scrapy crawl
הריצו בקשת בדיקה מול
https://vinaproxy.com/api/my-ipכדי לוודא רוטציה ואימות תקינים.
שאלות נפוצות
מדוע ה-Middleware המותאם אישית לפרוקסי ב-Scrapy נכשל כשהוגדר בעדיפות 800?
ה-HttpProxyMiddleware המובנה של Scrapy פועל בעדיפות 750. אם ה-Middleware שלכם פועל ב-800 (אחרי 750), פרטי הגישה user:pass המוטמעים לעולם לא מומרים לכותרת Proxy-Authorization. הגדירו תמיד את עדיפות ה-Middleware שלכם מתחת ל-750 (למשל 740).
האם Scrapy שומר על חיבורים פתוחים רציפים לכל פרוקסי?
כן. מאגר החיבורים של Twisted מנהל חיבורי keep-alive רציפים לכל נקודת קצה של פרוקסי.
האם שרתי הפרוקסי של VinaProxy הם ללא הגבלת נפח עבור משימות Scrapy של מיליוני דפים?
כן. כל חבילות ה-Dedicated IPv4 ו-Static ISP כוללות רוחב פס חודשי ללא הגבלה.
הרחיבו את ספיידרי ה-Scrapy שלכם עם מאגרי IP סטטיים ללא הגבלה
פרוקסי Dedicated IPv4 ו-Static ISP בכמות גדולה ובאספקה מיידית ב-7 מדינות.
קנו פרוקסי ל-Scrapy