Slik setter du opp og roterer proxyer i Python Scrapy
Updated:
Scrapys asynkrone Twisted-motor inneholder en innebygd HttpProxyMiddleware (med prioritet 750) som analyserer http://user:pass@ip:port-strenger tilordnet request.meta['proxy']. Ved å skrive en 10-linjers tilpasset Downloader Middleware med prioritet 740, kan spiderne dine automatisk rotere mellom en pool av ubegrensede, statiske VinaProxy-IP-er.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- 5+ IP-er35 000 VND
- 10+ IP-er25 000 VND
- 20+ IP-er25 000 VND
- 50+ IP-er25 000 VND
- 100+ IP-er25 000 VND
- 200+ IP-er25 000 VND
- 500+ IP-er25 000 VND
- 1000+ IP-er22 000 VND
- 2000+ IP-er20 000 VND
- 1 IP40 000 VND
- 5+ IP-er35 000 VND
- 10+ IP-er25 000 VND
- 20+ IP-er25 000 VND
- 50+ IP-er25 000 VND
- 100+ IP-er25 000 VND
- 200+ IP-er25 000 VND
- 500+ IP-er25 000 VND
- 1000+ IP-er22 000 VND
- 2000+ IP-er20 000 VND
Rekkefølge for Scrapy-proxy-middleware og innstillinger for samtidighet
Fordi HttpProxyMiddleware kjører med rekkefølge 750 for å fjerne user:pass fra proxy-URL-en og kode Proxy-Authorization-headeren, må enhver tilpasset middleware som setter request.meta['proxy'], kjøre med et lavere tall (f.eks. 740):
| Scrapy-innstilling | Anbefalt verdi | Formål |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Ruter forespørselen gjennom den angitte VinaProxy-proxyen |
| Middleware-prioritet | 740 (før 750) | Sikrer at HttpProxyMiddleware koder user:pass-headeren |
CONCURRENT_REQUESTS_PER_IP | 2 til 4 | Begrenser samtidige sockets per proxy-IP for å unngå HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Tilpasser crawl-forsinkelsen dynamisk basert på målets latens |
Beste praksis for storskala Scrapy-crawling
- Last inn listen din over VinaProxy-proxyer i
from_crawler()og tildelrequest.meta['proxy'] = random.choice(self.proxies)inne iprocess_request() - Aktiver
RANDOMIZE_DOWNLOAD_DELAY = Truesammen medDOWNLOAD_DELAY = 1.0, slik at forespørselsintervallene per IP aldri virker robotaktige - Ved nytt forsøk (
429eller503), velg en annen proxy fra poolen din før forespørselen legges i køen igjen
Trinn for trinn
- 1
Formater proxy-poolen din som http://user:pass@ip:port
Lim inn VinaProxy-listen din i vår Proxy Format Converter for å få URL-strenger.
- 2
Opprett en ProxyPoolMiddleware i middlewares.py
Definer
process_request(self, request, spider)for å setterequest.meta['proxy'] = random.choice(self.proxies). - 3
Registrer med prioritet 740 i settings.py
Legg til
'myproject.middlewares.ProxyPoolMiddleware': 740underDOWNLOADER_MIDDLEWARESog settCONCURRENT_REQUESTS_PER_IP = 2. - 4
Test med scrapy shell eller scrapy crawl
Kjør en testforespørsel mot
https://vinaproxy.com/api/my-ipfor å bekrefte rotasjon og autentisering.
Ofte stilte spørsmål
Hvorfor mislyktes min tilpassede Scrapy-proxy-middleware da den ble satt til prioritet 800?
Scrapys innebygde HttpProxyMiddleware kjører med prioritet 750. Hvis din middleware kjører med 800 (etter 750), blir de innebygde user:pass-påloggingsdetaljene aldri konvertert til en Proxy-Authorization-header. Sett alltid middleware-prioriteten din lavere enn 750 (som 740).
Holder Scrapy vedvarende tilkoblinger åpne til hver proxy?
Ja. Twisteds tilkoblingspool opprettholder vedvarende keep-alive-tilkoblinger per proxy-endepunkt.
Er VinaProxy-proxyer ubegrensede for Scrapy-jobber på flere millioner sider?
Ja. Alle abonnementer for Dedicated IPv4 og Static ISP inkluderer ubegrenset månedlig båndbredde.
Skaler Scrapy-spiderne dine med ubegrensede, statiske IP-pooler
Umiddelbare bulk-proxyer for Dedicated IPv4 og Static ISP på tvers av 7 land.
Kjøp Scrapy-proxyer