Paano mag-set up at mag-rotate ng mga proxy sa Python Scrapy
Updated:
Kasama sa asynchronous Twisted engine ng Scrapy ang isang built-in na HttpProxyMiddleware (sa priority 750) na nagpa-parse ng mga http://user:pass@ip:port string na nakatalaga sa request.meta['proxy']. Ang pagsulat ng 10-linyang custom na Downloader Middleware sa priority 740 ay nagbibigay-daan sa iyong mga spider na awtomatikong mag-rotate sa isang pool ng unmetered VinaProxy static IP.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP₫40,000
- 5+ na IP₫35,000
- 10+ na IP₫25,000
- 20+ na IP₫25,000
- 50+ na IP₫25,000
- 100+ na IP₫25,000
- 200+ na IP₫25,000
- 500+ na IP₫25,000
- 1000+ na IP₫22,000
- 2000+ na IP₫20,000
- 1 IP₫40,000
- 5+ na IP₫35,000
- 10+ na IP₫25,000
- 20+ na IP₫25,000
- 50+ na IP₫25,000
- 100+ na IP₫25,000
- 200+ na IP₫25,000
- 500+ na IP₫25,000
- 1000+ na IP₫22,000
- 2000+ na IP₫20,000
Pagkakasunud-sunod ng Scrapy proxy middleware at mga setting ng concurrency
Dahil ang HttpProxyMiddleware ay tumatakbo sa order na 750 upang alisin ang user:pass mula sa proxy URL at i-encode ang header na Proxy-Authorization, ang anumang custom na middleware na nagtatakda ng request.meta['proxy'] ay dapat tumakbo sa mas mababang numero (hal., 740):
| Setting sa Scrapy | Inirerekomendang Halaga | Layunin |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Ipinapasa ang request sa tinukoy na VinaProxy proxy |
| Priority ng Middleware | 740 (bago ang 750) | Tinitiyak na ie-encode ng HttpProxyMiddleware ang user:pass header |
CONCURRENT_REQUESTS_PER_IP | 2 hanggang 4 | Nililimitahan ang sabay-sabay na socket bawat proxy IP upang maiwasan ang HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dinamikong inaangkop ang crawl delay batay sa target latency |
Mga pinakamahusay na kasanayan para sa malakihang Scrapy crawl
- I-load ang iyong listahan ng VinaProxy proxy sa
from_crawler()at italaga angrequest.meta['proxy'] = random.choice(self.proxies)sa loob ngprocess_request() - I-enable ang
RANDOMIZE_DOWNLOAD_DELAY = Truekasama angDOWNLOAD_DELAY = 1.0upang hindi magmukhang robotic ang mga agwat ng request bawat IP - Sa muling pagsubok (
429o503), pumili ng ibang proxy mula sa iyong pool bago muling i-queue ang request
Sunod-sunod na hakbang
- 1
I-format ang iyong proxy pool bilang http://user:pass@ip:port
I-paste ang iyong listahan ng VinaProxy sa aming Proxy Format Converter upang makakuha ng mga URL string.
- 2
Gumawa ng ProxyPoolMiddleware sa middlewares.py
I-define ang
process_request(self, request, spider)upang itakda angrequest.meta['proxy'] = random.choice(self.proxies). - 3
Irehistro sa priority 740 sa settings.py
Idagdag ang
'myproject.middlewares.ProxyPoolMiddleware': 740sa ilalim ngDOWNLOADER_MIDDLEWARESat itakda angCONCURRENT_REQUESTS_PER_IP = 2. - 4
Subukan gamit ang scrapy shell o scrapy crawl
Magpatakbo ng pansubok na request laban sa
https://vinaproxy.com/api/my-ipupang i-verify ang rotation at authentication.
Mga madalas itanong
Bakit nabigo ang aking custom na Scrapy proxy middleware nang itakda sa priority 800?
Tumatakbo ang built-in na HttpProxyMiddleware ng Scrapy sa priority 750. Kung tatakbo ang iyong middleware sa 800 (pagkatapos ng 750), hindi kailanman mako-convert ang inline na user:pass credential sa isang Proxy-Authorization header. Palaging itakda ang priority ng iyong middleware sa mas mababa sa 750 (tulad ng 740).
Pinapanatili ba ng Scrapy na bukas ang mga persistent connection sa bawat proxy?
Oo. Pinapanatili ng connection pool ng Twisted ang mga persistent na keep-alive connection bawat proxy endpoint.
Unmetered ba ang mga VinaProxy proxy para sa mga Scrapy job na may milyun-milyong pahina?
Oo. Kasama sa lahat ng Dedicated IPv4 at Static ISP plan ang walang limitasyong buwanang bandwidth.
I-scale ang iyong mga Scrapy spider gamit ang mga unmetered static IP pool
Instant na bultuhang Dedicated IPv4 at Static ISP proxy sa 7 bansa.
Bumili ng mga Scrapy Proxy