Kako postaviti i rotirati proxyje u Python Scrapyju
Updated:
Scrapyjev asinkroni Twisted pogon uključuje ugrađeni HttpProxyMiddleware (s prioritetom 750) koji parsira http://user:pass@ip:port nizove dodijeljene varijabli request.meta['proxy']. Pisanje prilagođenog Downloader Middlewarea od 10 redaka s prioritetom 740 omogućuje vašim spiderima automatsko rotiranje kroz pool neograničenih VinaProxy statičkih IP adresa.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 VND
- 5+ IP-ova35.000 VND
- 10+ IP-ova25.000 VND
- 20+ IP-ova25.000 VND
- 50+ IP-ova25.000 VND
- 100+ IP-ova25.000 VND
- 200+ IP-ova25.000 VND
- 500+ IP-ova25.000 VND
- 1000+ IP-ova22.000 VND
- 2000+ IP-ova20.000 VND
- 1 IP40.000 VND
- 5+ IP-ova35.000 VND
- 10+ IP-ova25.000 VND
- 20+ IP-ova25.000 VND
- 50+ IP-ova25.000 VND
- 100+ IP-ova25.000 VND
- 200+ IP-ova25.000 VND
- 500+ IP-ova25.000 VND
- 1000+ IP-ova22.000 VND
- 2000+ IP-ova20.000 VND
Redoslijed Scrapy proxy middlewarea i postavke istovremenosti
Budući da se HttpProxyMiddleware izvodi s redoslijedom 750 kako bi uklonio user:pass iz proxy URL-a i kodirao zaglavlje Proxy-Authorization, svaki prilagođeni middleware koji postavlja request.meta['proxy'] mora se izvoditi pod manjim brojem (npr. 740):
| Scrapy postavka | Preporučena vrijednost | Svrha |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Usmjerava zahtjev kroz navedeni VinaProxy proxy |
| Prioritet middlewarea | 740 (prije 750) | Osigurava da HttpProxyMiddleware kodira user:pass zaglavlje |
CONCURRENT_REQUESTS_PER_IP | 2 do 4 | Ograničava istovremene sockete po IP adresi proxyja radi izbjegavanja greške HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dinamički prilagođava odgodu preuzimanja na temelju latencije cilja |
Najbolje prakse za opsežna Scrapy pretraživanja
- Učitajte svoj VinaProxy popis proxyja u
from_crawler()i dodijeliterequest.meta['proxy'] = random.choice(self.proxies)unutarprocess_request() - Omogućite
RANDOMIZE_DOWNLOAD_DELAY = TrueuzDOWNLOAD_DELAY = 1.0kako intervali zahtjeva po IP-u nikada ne bi izgledali robotski - Prilikom ponovnog pokušaja (
429ili503), odaberite drugi proxy iz svog poola prije ponovnog stavljanja zahtjeva u red čekanja
Korak po korak
- 1
Formatirajte svoj proxy pool kao http://user:pass@ip:port
Zalijepite svoj VinaProxy popis u naš Proxy Format Converter kako biste dobili URL nizove.
- 2
Stvorite ProxyPoolMiddleware u middlewares.py
Definirajte
process_request(self, request, spider)za postavljanjerequest.meta['proxy'] = random.choice(self.proxies). - 3
Registrirajte s prioritetom 740 u settings.py
Dodajte
'myproject.middlewares.ProxyPoolMiddleware': 740podDOWNLOADER_MIDDLEWARESi postaviteCONCURRENT_REQUESTS_PER_IP = 2. - 4
Testirajte pomoću scrapy shell ili scrapy crawl
Pokrenite testni zahtjev prema
https://vinaproxy.com/api/my-ipkako biste potvrdili rotaciju i autentifikaciju.
Često postavljana pitanja
Zašto moj prilagođeni Scrapy proxy middleware nije radio kada je postavljen na prioritet 800?
Scrapyjev ugrađeni HttpProxyMiddleware izvodi se s prioritetom 750. Ako se vaš middleware izvodi na 800 (nakon 750), ugrađene user:pass vjerodajnice nikada se ne pretvaraju u zaglavlje Proxy-Authorization. Uvijek postavite prioritet svog middlewarea ispod 750 (kao što je 740).
Održava li Scrapy trajne veze otvorenima prema svakom proxyju?
Da. Twistedov connection pool održava trajne keep-alive veze za svaku krajnju točku proxyja.
Jesu li VinaProxy proxyji neograničeni za Scrapy zadatke od više milijuna stranica?
Da. Svi Dedicated IPv4 i Static ISP paketi uključuju neograničeni mjesečni promet.
Skalirajte svoje Scrapy spidere s neograničenim statičkim IP poolovima
Trenutačni paketni Dedicated IPv4 i Static ISP proxyji u 7 zemalja.
Kupite Scrapy proxyje