Kako nastaviti in rotirati proxyje v Python Scrapy
Updated:
Scrapyjev asinhroni pogon Twisted vključuje vgrajen HttpProxyMiddleware (s prioriteto 750), ki razčlenjuje nize http://user:pass@ip:port, dodeljene request.meta['proxy']. Zapis 10-vrstične vmesne programske opreme Downloader Middleware s prioriteto 740 vašim pajkom omogoča samodejno rotacijo med naborom neomejenih statičnih IP-jev VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 ₫
- 5+ IP-jev35.000 ₫
- 10+ IP-jev25.000 ₫
- 20+ IP-jev25.000 ₫
- 50+ IP-jev25.000 ₫
- 100+ IP-jev25.000 ₫
- 200+ IP-jev25.000 ₫
- 500+ IP-jev25.000 ₫
- 1000+ IP-jev22.000 ₫
- 2000+ IP-jev20.000 ₫
- 1 IP40.000 ₫
- 5+ IP-jev35.000 ₫
- 10+ IP-jev25.000 ₫
- 20+ IP-jev25.000 ₫
- 50+ IP-jev25.000 ₫
- 100+ IP-jev25.000 ₫
- 200+ IP-jev25.000 ₫
- 500+ IP-jev25.000 ₫
- 1000+ IP-jev22.000 ₫
- 2000+ IP-jev20.000 ₫
Vrstni red Scrapy proxy middleware in nastavitve sočasnosti
Ker se HttpProxyMiddleware izvaja z zaporedno številko 750, da odstrani user:pass iz URL-ja proxyja in zakodira glavo Proxy-Authorization, se mora vsaka prilagojena vmesna programska oprema, ki nastavlja request.meta['proxy'], izvajati z nižjo številko (npr. 740):
| Nastavitev Scrapy | Priporočena vrednost | Namen |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Usmeri zahtevo prek navedenega proxyja VinaProxy |
| Prioriteta vmesne programske opreme | 740 (pred 750) | Zagotovi, da HttpProxyMiddleware zakodira glavo user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 do 4 | Omeji sočasne vtičnice na IP proxyja, da prepreči HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dinamično prilagaja zakasnitev pajkanja glede na ciljno zakasnitev |
Najboljše prakse za obsežno pajkanje s Scrapyjem
- Naložite seznam proxyjev VinaProxy v
from_crawler()in dodeliterequest.meta['proxy'] = random.choice(self.proxies)znotrajprocess_request() - Omogočite
RANDOMIZE_DOWNLOAD_DELAY = Trueskupaj zDOWNLOAD_DELAY = 1.0, da intervali zahtev na posamezen IP nikoli ne delujejo robotsko - Ob ponovnem poskusu (
429ali503) izberite drug proxy iz svojega nabora, preden zahtevo znova uvrstite v vrsto
Navodila po korakih
- 1
Formatirajte svoj nabor proxyjev kot http://user:pass@ip:port
Prilepite svoj seznam VinaProxy v naš Proxy Format Converter, da pridobite nize URL-jev.
- 2
Ustvarite ProxyPoolMiddleware v middlewares.py
Definirajte
process_request(self, request, spider), da nastaviterequest.meta['proxy'] = random.choice(self.proxies). - 3
Registrirajte s prioriteto 740 v settings.py
Dodajte
'myproject.middlewares.ProxyPoolMiddleware': 740podDOWNLOADER_MIDDLEWARESin nastaviteCONCURRENT_REQUESTS_PER_IP = 2. - 4
Preizkusite s scrapy shell ali scrapy crawl
Zaženite poskusno zahtevo na
https://vinaproxy.com/api/my-ip, da preverite rotacijo in avtentikacijo.
Pogosta vprašanja
Zakaj je moja prilagojena vmesna programska oprema za Scrapy proxy odpovedala pri prioriteti 800?
Vgrajeni HttpProxyMiddleware v Scrapyju se izvaja s prioriteto 750. Če se vaša vmesna programska oprema izvaja pri 800 (po 750), se vdelani podatki za prijavo user:pass nikoli ne pretvorijo v glavo Proxy-Authorization. Prioriteto svoje vmesne programske opreme vedno nastavite pod 750 (kot je 740).
Ali Scrapy ohranja trajne povezave odprte do vsakega proxyja?
Da. Twistedov nabor povezav vzdržuje trajne povezave keep-alive za vsako končno točko proxyja.
Ali so proxyji VinaProxy neomejeni za Scrapy opravila z več milijoni strani?
Da. Vsi paketi Dedicated IPv4 in Static ISP vključujejo neomejeno mesečno pasovno širino.
Razširite svoje Scrapy pajke z neomejenimi nabori statičnih IP-jev
Takojšnji paketi proxyjev Dedicated IPv4 in Static ISP v 7 državah.
Kupite Scrapy proxyje