Cum să configurezi și să rotești proxy-uri în Python Scrapy
Updated:
Motorul asincron Twisted din Scrapy include un HttpProxyMiddleware integrat (la prioritatea 750) care analizează șirurile http://user:pass@ip:port atribuite la request.meta['proxy']. Crearea unui Downloader Middleware personalizat de 10 linii la prioritatea 740 permite spider-ilor tăi să rotească automat cererile printr-un pool de IP-uri statice nelimitate VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 VND
- 5+ IP-uri35.000 VND
- 10+ IP-uri25.000 VND
- 20+ IP-uri25.000 VND
- 50+ IP-uri25.000 VND
- 100+ IP-uri25.000 VND
- 200+ IP-uri25.000 VND
- 500+ IP-uri25.000 VND
- 1000+ IP-uri22.000 VND
- 2000+ IP-uri20.000 VND
- 1 IP40.000 VND
- 5+ IP-uri35.000 VND
- 10+ IP-uri25.000 VND
- 20+ IP-uri25.000 VND
- 50+ IP-uri25.000 VND
- 100+ IP-uri25.000 VND
- 200+ IP-uri25.000 VND
- 500+ IP-uri25.000 VND
- 1000+ IP-uri22.000 VND
- 2000+ IP-uri20.000 VND
Ordinea middleware-urilor de proxy și setările de concurență în Scrapy
Pentru că HttpProxyMiddleware rulează la ordinea 750 pentru a elimina user:pass din URL-ul proxy-ului și a codifica antetul Proxy-Authorization, orice middleware personalizat care setează request.meta['proxy'] trebuie să ruleze la un număr mai mic (de exemplu, 740):
| Setare Scrapy | Valoare recomandată | Scop |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Direcționează cererea prin proxy-ul VinaProxy specificat |
| Prioritate middleware | 740 (înainte de 750) | Asigură codificarea antetului user:pass de către HttpProxyMiddleware |
CONCURRENT_REQUESTS_PER_IP | 2 până la 4 | Limitează socketurile simultane per IP proxy pentru a evita eroarea HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Adaptează dinamic întârzierea de crawling în funcție de latența țintei |
Bune practici pentru crawling de mare volum în Scrapy
- Încarcă lista de proxy-uri VinaProxy în
from_crawler()și atribuierequest.meta['proxy'] = random.choice(self.proxies)în interiorulprocess_request() - Activează
RANDOMIZE_DOWNLOAD_DELAY = Truealături deDOWNLOAD_DELAY = 1.0astfel încât intervalele dintre cereri per IP să nu pară robotice - La reîncercare (
429sau503), alege un proxy diferit din pool înainte de a reintroduce cererea în coadă
Pas cu pas
- 1
Formatează pool-ul de proxy-uri ca http://user:pass@ip:port
Lipește lista VinaProxy în Proxy Format Converter pentru a obține șirurile URL.
- 2
Creează un ProxyPoolMiddleware în middlewares.py
Definește
process_request(self, request, spider)pentru a setarequest.meta['proxy'] = random.choice(self.proxies). - 3
Înregistrează la prioritatea 740 în settings.py
Adaugă
'myproject.middlewares.ProxyPoolMiddleware': 740subDOWNLOADER_MIDDLEWARESși seteazăCONCURRENT_REQUESTS_PER_IP = 2. - 4
Testează cu scrapy shell sau scrapy crawl
Rulează o cerere de test către
https://vinaproxy.com/api/my-ippentru a verifica rotația și autentificarea.
Întrebări frecvente
De ce a eșuat middleware-ul meu personalizat de proxy din Scrapy când a fost setat la prioritatea 800?
Middleware-ul integrat HttpProxyMiddleware din Scrapy rulează la prioritatea 750. Dacă middleware-ul tău rulează la 800 (după 750), datele de autentificare inline user:pass nu sunt convertite niciodată într-un antet Proxy-Authorization. Setează întotdeauna prioritatea middleware-ului tău sub 750 (cum ar fi 740).
Păstrează Scrapy conexiuni persistente deschise către fiecare proxy?
Da. Pool-ul de conexiuni Twisted menține conexiuni persistente keep-alive pentru fiecare endpoint de proxy.
Sunt proxy-urile VinaProxy nelimitate pentru sarcini Scrapy de milioane de pagini?
Da. Toate abonamentele Dedicated IPv4 și Static ISP includ lățime de bandă lunară nelimitată.
Scalează-ți spider-ii Scrapy cu pool-uri de IP-uri statice nelimitate
Proxy-uri Dedicated IPv4 și Static ISP instant în volum mare în 7 țări.
Cumpără proxy-uri Scrapy