نحوه راهاندازی و چرخاندن پروکسیها در 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 آیپی₫۴۰٬۰۰۰
- +5 آیپی₫۳۵٬۰۰۰
- +10 آیپی₫۲۵٬۰۰۰
- +20 آیپی₫۲۵٬۰۰۰
- +50 آیپی₫۲۵٬۰۰۰
- +100 آیپی₫۲۵٬۰۰۰
- +200 آیپی₫۲۵٬۰۰۰
- +500 آیپی₫۲۵٬۰۰۰
- +1000 آیپی₫۲۲٬۰۰۰
- +2000 آیپی₫۲۰٬۰۰۰
- 1 آیپی₫۴۰٬۰۰۰
- +5 آیپی₫۳۵٬۰۰۰
- +10 آیپی₫۲۵٬۰۰۰
- +20 آیپی₫۲۵٬۰۰۰
- +50 آیپی₫۲۵٬۰۰۰
- +100 آیپی₫۲۵٬۰۰۰
- +200 آیپی₫۲۵٬۰۰۰
- +500 آیپی₫۲۵٬۰۰۰
- +1000 آیپی₫۲۲٬۰۰۰
- +2000 آیپی₫۲۰٬۰۰۰
ترتیب میانافزارهای پروکسی Scrapy و تنظیمات همزمانی
از آنجا که HttpProxyMiddleware با اولویت 750 اجرا میشود تا user:pass را از نشانی اینترنتی پروکسی حذف کرده و هدر Proxy-Authorization را انکود کند، هر میانافزار سفارشی که request.meta['proxy'] را تنظیم میکند باید با عددی کمتر (مثلاً 740) اجرا شود:
| تنظیمات Scrapy | مقدار پیشنهادی | هدف |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | هدایت درخواست از طریق پروکسی تعیینشده VinaProxy |
| اولویت میانافزار | 740 (قبل از 750) | تضمین میکند که HttpProxyMiddleware هدر user:pass را انکود کند |
CONCURRENT_REQUESTS_PER_IP | 2 تا 4 | محدود کردن سوکتهای همزمان به ازای هر IP پروکسی برای جلوگیری از HTTP 429 |
AUTOTHROTTLE_ENABLED | True | تنظیم پویای تأخیر خزش بر اساس تاخیر پاسخ مقصد |
بهترین روشها برای خزشهای حجیم در Scrapy
- فهرست پروکسیهای VinaProxy خود را در
from_crawler()بارگذاری کرده و در داخلprocess_request()مقدارrequest.meta['proxy'] = random.choice(self.proxies)را تنظیم کنید - گزینه
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ارسال کنید تا چرخش و احراز هویت را تأیید نمایید.
پرسشهای متداول
چرا میانافزار پروکسی سفارشی Scrapy من با تنظیم اولویت روی 800 با خطا مواجه شد؟
میانافزار داخلی HttpProxyMiddleware در Scrapy با اولویت 750 اجرا میشود. اگر میانافزار شما با اولویت 800 (بعد از 750) اجرا شود، اطلاعات اعتبارسنجی user:pass درونخطی هرگز به هدر Proxy-Authorization تبدیل نخواهند شد. همیشه اولویت میانافزار خود را کمتر از 750 (مانند 740) تنظیم کنید.
آیا Scrapy اتصالات دائمی را به هر پروکسی باز نگه میدارد؟
بله. استخر اتصالات Twisted اتصالات دائمی keep-alive را به ازای هر اندپوینت پروکسی حفظ میکند.
آیا پروکسیهای VinaProxy برای پروژههای چند میلیون صفحهای Scrapy نامحدود هستند؟
بله. تمامی پلنهای Dedicated IPv4 و Static ISP شامل پهنای باند ماهانه نامحدود هستند.
خزندههای Scrapy خود را با استخرهای IP ثابت و نامحدود ارتقا دهید
تحویل آنی عمده پروکسیهای Dedicated IPv4 و Static ISP در سراسر 7 کشور.
خرید پروکسیهای Scrapy