Sådan opsætter og roterer du proxyer i Python Scrapy
Updated:
Scrapys asynkrone Twisted-motor indeholder en indbygget HttpProxyMiddleware (med prioritet 750), som fortolker http://user:pass@ip:port-strenge tildelt til request.meta['proxy']. Ved at skrive en brugerdefineret Downloader Middleware på 10 linjer med prioritet 740 kan dine spiders automatisk rotere over en pulje af ubegrænsede statiske VinaProxy-IP'er.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 ₫
- 5+ IP'er35.000 ₫
- 10+ IP'er25.000 ₫
- 20+ IP'er25.000 ₫
- 50+ IP'er25.000 ₫
- 100+ IP'er25.000 ₫
- 200+ IP'er25.000 ₫
- 500+ IP'er25.000 ₫
- 1000+ IP'er22.000 ₫
- 2000+ IP'er20.000 ₫
- 1 IP40.000 ₫
- 5+ IP'er35.000 ₫
- 10+ IP'er25.000 ₫
- 20+ IP'er25.000 ₫
- 50+ IP'er25.000 ₫
- 100+ IP'er25.000 ₫
- 200+ IP'er25.000 ₫
- 500+ IP'er25.000 ₫
- 1000+ IP'er22.000 ₫
- 2000+ IP'er20.000 ₫
Rækkefølge for Scrapy-proxymiddleware og indstillinger for samtidighed
Da HttpProxyMiddleware kører med rækkefølgen 750 for at fjerne user:pass fra proxy-URL'en og kode Proxy-Authorization-headeren, skal enhver brugerdefineret middleware, der angiver request.meta['proxy'], køre med et lavere tal (f.eks. 740):
| Scrapy-indstilling | Anbefalet værdi | Formål |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Sender anmodningen gennem den angivne VinaProxy-proxy |
| Middleware-prioritet | 740 (før 750) | Sikrer, at HttpProxyMiddleware koder user:pass-headeren |
CONCURRENT_REQUESTS_PER_IP | 2 til 4 | Begrænser samtidige sockets pr. proxy-IP for at undgå HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Tilpasser crawl-forsinkelsen dynamisk baseret på målets responstid |
Bedste praksis for Scrapy-crawling i store mængder
- Indlæs din VinaProxy-proxyliste i
from_crawler(), og tildelrequest.meta['proxy'] = random.choice(self.proxies)inde iprocess_request() - Aktivér
RANDOMIZE_DOWNLOAD_DELAY = Truesammen medDOWNLOAD_DELAY = 1.0, så anmodningsintervaller pr. IP aldrig virker robotagtige - Ved genforsøg (
429eller503) skal du vælge en anden proxy fra din pulje, før anmodningen sættes i kø igen
Trin for trin
- 1
Formatér din proxypulje som http://user:pass@ip:port
Indsæt din VinaProxy-liste i vores Proxy Format Converter for at få URL-strenge.
- 2
Opret en ProxyPoolMiddleware i middlewares.py
Definér
process_request(self, request, spider)for at angiverequest.meta['proxy'] = random.choice(self.proxies). - 3
Registrer med prioritet 740 i settings.py
Tilføj
'myproject.middlewares.ProxyPoolMiddleware': 740underDOWNLOADER_MIDDLEWARES, og indstilCONCURRENT_REQUESTS_PER_IP = 2. - 4
Test med scrapy shell eller scrapy crawl
Kør en testanmodning mod
https://vinaproxy.com/api/my-ipfor at bekræfte rotation og godkendelse.
Ofte stillede spørgsmål
Hvorfor mislykkedes min brugerdefinerede Scrapy-proxymiddleware, når den var sat til prioritet 800?
Scrapys indbyggede HttpProxyMiddleware kører med prioritet 750. Hvis din middleware kører med 800 (efter 750), bliver de indlejrede user:pass-loginoplysninger aldrig konverteret til en Proxy-Authorization-header. Sæt altid din middleware-prioritet lavere end 750 (f.eks. 740).
Holder Scrapy permanente forbindelser åbne til hver proxy?
Ja. Twisteds forbindelsespulje opretholder permanente keep-alive-forbindelser pr. proxy-slutpunkt.
Er VinaProxy-proxyer ubegrænsede til Scrapy-opgaver med flere millioner sider?
Ja. Alle Dedicated IPv4- og Static ISP-abonnementer inkluderer ubegrænset månedlig båndbredde.
Skalér dine Scrapy-spiders med ubegrænsede statiske IP-pools
Øjeblikkelige bulk Dedicated IPv4- og Static ISP-proxyer i 7 lande.
Køb Scrapy-proxyer