Kaip nustatyti ir rotuoti proxy Python Scrapy
Updated:
Asinchroninis Scrapy „Twisted“ variklis turi integruotą HttpProxyMiddleware (su prioritetu 750), kuris apdoroja request.meta['proxy'] priskirtas http://user:pass@ip:port eilutes. Vos 10 eilučių pritaikyta „Downloader Middleware“ su prioritetu 740 leidžia jūsų vorams automatiškai rotuoti neriboto srauto VinaProxy statinių IP adresų telkinį.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- Nuo 5 IP35 000 VND
- Nuo 10 IP25 000 VND
- Nuo 20 IP25 000 VND
- Nuo 50 IP25 000 VND
- Nuo 100 IP25 000 VND
- Nuo 200 IP25 000 VND
- Nuo 500 IP25 000 VND
- Nuo 1000 IP22 000 VND
- Nuo 2000 IP20 000 VND
- 1 IP40 000 VND
- Nuo 5 IP35 000 VND
- Nuo 10 IP25 000 VND
- Nuo 20 IP25 000 VND
- Nuo 50 IP25 000 VND
- Nuo 100 IP25 000 VND
- Nuo 200 IP25 000 VND
- Nuo 500 IP25 000 VND
- Nuo 1000 IP22 000 VND
- Nuo 2000 IP20 000 VND
Scrapy proxy middleware eiliškumo ir vienalaikiškumo nustatymai
Kadangi HttpProxyMiddleware veikia 750 prioritetu, kad pašalintų user:pass iš proxy URL ir užkoduotų Proxy-Authorization antraštę, bet kokia pritaikyta tarpinė programinė įranga, nustatanti request.meta['proxy'], privalo veikti su mažesniu numeriu (pvz., 740):
| Scrapy nustatymas | Rekomenduojama reikšmė | Paskirtis |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Nukreipia užklausą per nurodytą VinaProxy proxy |
| Middleware prioritetas | 740 (prieš 750) | Užtikrina, kad HttpProxyMiddleware užkoduotų user:pass antraštę |
CONCURRENT_REQUESTS_PER_IP | nuo 2 iki 4 | Apriboja vienalaikius ryšius vienam proxy IP, kad būtų išvengta HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dinamiškai pritaiko nuskaitymo delsą pagal tikslinio serverio delsą |
Geroji praktika didelės apimties Scrapy duomenų rinkimui
- Užkraukite savo VinaProxy proxy sąrašą metode
from_crawler()ir priskirkiterequest.meta['proxy'] = random.choice(self.proxies)metodoprocess_request()viduje - Įjunkite
RANDOMIZE_DOWNLOAD_DELAY = Truekartu suDOWNLOAD_DELAY = 1.0, kad užklausų intervalai vienam IP niekada neatrodytų kaip roboto - Pakartotinio bandymo metu (klaidos
429arba503), prieš grąžindami užklausą į eilę, pasirinkite kitą proxy iš savo telkinio
Žingsnis po žingsnio
- 1
Suformatuokite proxy telkinį kaip http://user:pass@ip:port
Įklijuokite savo VinaProxy sąrašą į mūsų Proxy formato keitiklį, kad gautumėte URL eilutes.
- 2
Sukurkite ProxyPoolMiddleware faile middlewares.py
Apibrėžkite
process_request(self, request, spider), kad nustatytumėterequest.meta['proxy'] = random.choice(self.proxies). - 3
Užregistruokite su prioritetu 740 faile settings.py
Pridėkite
'myproject.middlewares.ProxyPoolMiddleware': 740skiltyjeDOWNLOADER_MIDDLEWARESir nustatykiteCONCURRENT_REQUESTS_PER_IP = 2. - 4
Išbandykite naudodami scrapy shell arba scrapy crawl
Atlikite bandomąją užklausą į
https://vinaproxy.com/api/my-ip, kad patikrintumėte rotaciją ir autentifikavimą.
Dažnai užduodami klausimai
Kodėl mano sukurta Scrapy proxy middleware neveikė, kai buvo nustatytas 800 prioritetas?
Scrapy integruota HttpProxyMiddleware veikia 750 prioritetu. Jei jūsų middleware veikia 800 prioritetu (po 750), URL esantys user:pass prisijungimo duomenys niekada nebus konvertuoti į Proxy-Authorization antraštę. Visada nustatykite savo middleware prioritetą, mažesnį nei 750 (pvz., 740).
Ar Scrapy palaiko atvirus nuolatinius ryšius su kiekvienu proxy?
Taip. „Twisted“ ryšių telkinys palaiko nuolatinius „keep-alive“ ryšius su kiekvienu proxy galutiniu tašku.
Ar VinaProxy proxy srautas yra neribotas milijonų puslapių Scrapy užduotims?
Taip. Visi Dedicated IPv4 ir Static ISP planai suteikia neribotą mėnesio duomenų srautą.
Išplėskite savo Scrapy vorų pajėgumus su neriboto srauto statinių IP telkiniais
Akimirksniu paruošti dideli Dedicated IPv4 ir Static ISP proxy kiekiai 7 šalyse.
Pirkti Scrapy proxy