Jak skonfigurować i rotować proxy w Python Scrapy
Updated:
Asynchroniczny silnik Twisted w Scrapy zawiera wbudowany komponent HttpProxyMiddleware (o priorytecie 750), który przetwarza ciągi http://user:pass@ip:port przypisane do request.meta['proxy']. Utworzenie 10-wierszowego, własnego Downloader Middleware o priorytecie 740 pozwala Twoim crawlerom automatycznie rotować zapytania w puli nielimitowanych statycznych adresów IP od VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
Kolejność middleware proxy i ustawienia współbieżności w Scrapy
Ponieważ HttpProxyMiddleware działa z priorytetem 750, aby wyodrębnić user:pass z adresu URL proxy i zakodować nagłówek Proxy-Authorization, każdy niestandardowy middleware ustawiający request.meta['proxy'] musi działać z niższym numerem (np. 740):
| Ustawienie Scrapy | Zalecana wartość | Przeznaczenie |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Kieruje żądanie przez wskazane proxy VinaProxy |
| Priorytet middleware | 740 (przed 750) | Zapewnia, że HttpProxyMiddleware zakoduje nagłówek user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 do 4 | Ogranicza jednoczesne połączenia na IP proxy, zapobiegając błędom HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Dynamicznie dostosowuje opóźnienie pobierania na podstawie docelowego opóźnienia |
Dobre praktyki przy scrapowaniu na dużą skalę w Scrapy
- Wczytaj listę proxy VinaProxy w
from_crawler()i przypiszrequest.meta['proxy'] = random.choice(self.proxies)wewnątrzprocess_request() - Włącz
RANDOMIZE_DOWNLOAD_DELAY = Truewraz zDOWNLOAD_DELAY = 1.0, aby odstępy między żądaniami dla danego IP nie wyglądały nienaturalnie - W przypadku ponowienia (
429lub503) wybierz inne proxy ze swojej puli przed ponownym umieszczeniem żądania w kolejce
Krok po kroku
- 1
Sformatuj pulę proxy jako http://user:pass@ip:port
Wklej listę VinaProxy do naszego narzędzia Proxy Format Converter, aby uzyskać ciągi URL.
- 2
Utwórz ProxyPoolMiddleware w middlewares.py
Zdefiniuj
process_request(self, request, spider), aby ustawićrequest.meta['proxy'] = random.choice(self.proxies). - 3
Zarejestruj middleware z priorytetem 740 w settings.py
Dodaj
'myproject.middlewares.ProxyPoolMiddleware': 740wDOWNLOADER_MIDDLEWARESi ustawCONCURRENT_REQUESTS_PER_IP = 2. - 4
Przetestuj za pomocą scrapy shell lub scrapy crawl
Wyślij żądanie testowe do
https://vinaproxy.com/api/my-ip, aby zweryfikować rotację i uwierzytelnianie.
Często zadawane pytania
Dlaczego mój niestandardowy middleware proxy w Scrapy nie zadziałał z priorytetem 800?
Wbudowany w Scrapy komponent HttpProxyMiddleware działa z priorytetem 750. Jeśli Twój middleware działa z priorytetem 800 (po 750), dane uwierzytelniające user:pass w adresie URL nigdy nie zostaną przekształcone w nagłówek Proxy-Authorization. Zawsze ustawiaj priorytet swojego middleware poniżej 750 (np. 740).
Czy Scrapy utrzymuje stałe połączenia z każdym serwerem proxy?
Tak. Pula połączeń biblioteki Twisted utrzymuje stałe połączenia keep-alive dla każdego punktu końcowego proxy.
Czy proxy VinaProxy są nielimitowane w zadaniach Scrapy obejmujących miliony stron?
Tak. Wszystkie plany Dedicated IPv4 i Static ISP zawierają nielimitowany miesięczny transfer.
Skaluj crawlery Scrapy dzięki pulom nielimitowanych statycznych IP
Błyskawiczny dostęp hurtowy do proxy Dedicated IPv4 i Static ISP w 7 krajach.
Kup proxy do Scrapy