Kuinka määrittää ja kierrättää välityspalvelimia Python Scrapossa
Updated:
Scrapyn asynkroninen Twisted-moottori sisältää sisäänrakennetun HttpProxyMiddleware-komponentin (prioriteetilla 750), joka jäsentää kohteeseen request.meta['proxy'] määritetyt http://user:pass@ip:port -merkkijonot. Kirjoittamalla 10 rivin mukautetun Downloader Middleware -komponentin prioriteetille 740 spiderisi voivat kierrättää automaattisesti rajattomien staattisten VinaProxy-IP-osoitteiden poolia.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- 5+ IP:tä35 000 VND
- 10+ IP:tä25 000 VND
- 20+ IP:tä25 000 VND
- 50+ IP:tä25 000 VND
- 100+ IP:tä25 000 VND
- 200+ IP:tä25 000 VND
- 500+ IP:tä25 000 VND
- 1000+ IP:tä22 000 VND
- 2000+ IP:tä20 000 VND
- 1 IP40 000 VND
- 5+ IP:tä35 000 VND
- 10+ IP:tä25 000 VND
- 20+ IP:tä25 000 VND
- 50+ IP:tä25 000 VND
- 100+ IP:tä25 000 VND
- 200+ IP:tä25 000 VND
- 500+ IP:tä25 000 VND
- 1000+ IP:tä22 000 VND
- 2000+ IP:tä20 000 VND
Scrapyn proxy-middlewaren järjestys ja samanaikaisuusasetukset
Koska HttpProxyMiddleware suoritetaan prioriteetilla 750, jotta se poistaa user:pass -tiedot välityspalvelimen URL-osoitteesta ja koodaa Proxy-Authorization-otsakkeen, minkä tahansa request.meta['proxy'] -arvon asettavan mukautetun middlewaren on toimittava pienemmällä järjestysnumerolla (esim. 740):
| Scrapy-asetus | Suositeltu arvo | Käyttötarkoitus |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Ohjaa pyynnön määritetyn VinaProxy-välityspalvelimen kautta |
| Middlewaren prioriteetti | 740 (ennen arvoa 750) | Varmistaa, että HttpProxyMiddleware koodaa user:pass -otsakkeen |
CONCURRENT_REQUESTS_PER_IP | 2 - 4 | Rajoittaa samanaikaiset socket-yhteydet proxy-IP:tä kohden HTTP 429 -virheiden välttämiseksi |
AUTOTHROTTLE_ENABLED | True | Mukauttaa latausviivettä dynaamisesti kohteen vasteajan mukaan |
Parhaat käytännöt suuren volyymin Scrapy-haravointiin
- Lataa VinaProxy-proxylista metodissa
from_crawler()ja asetarequest.meta['proxy'] = random.choice(self.proxies)metodinprocess_request()sisällä - Ota käyttöön
RANDOMIZE_DOWNLOAD_DELAY = TrueasetuksenDOWNLOAD_DELAY = 1.0rinnalla, jotta IP-kohtaiset pyyntövälit eivät vaikuta robottimaisilta - Valitse uudelleenyrityksessä (
429tai503) poolistasi toinen välityspalvelin ennen pyynnön asettamista uudelleen jonoon
Vaihe vaiheelta
- 1
Muotoile proxypoolisi muotoon http://user:pass@ip:port
Liitä VinaProxy-listasi työkaluun Proxy Format Converter saadaksesi URL-merkkijonot.
- 2
Luo ProxyPoolMiddleware tiedostoon middlewares.py
Määritä
process_request(self, request, spider)asettamaanrequest.meta['proxy'] = random.choice(self.proxies). - 3
Rekisteröi prioriteetilla 740 tiedostossa settings.py
Lisää
'myproject.middlewares.ProxyPoolMiddleware': 740kohtaanDOWNLOADER_MIDDLEWARESja asetaCONCURRENT_REQUESTS_PER_IP = 2. - 4
Testaa komennolla scrapy shell tai scrapy crawl
Suorita testipyyntö osoitteeseen
https://vinaproxy.com/api/my-ipkierrätyksen ja todennuksen varmistamiseksi.
Usein kysytyt kysymykset
Miksi mukautettu Scrapy-proxy-middlewareni epäonnistui prioriteetilla 800?
Scrapyn sisäänrakennettu HttpProxyMiddleware suoritetaan prioriteetilla 750. Jos oma middleware suoritetaan prioriteetilla 800 (arvon 750 jälkeen), osoitteen sisältämiä user:pass -tunnisteita ei koskaan muunneta Proxy-Authorization-otsakkeeksi. Aseta middlewaren prioriteetiksi aina alle 750 (kuten 740).
Pitääkö Scrapy pysyvät yhteydet auki jokaiseen välityspalvelimeen?
Kyllä. Twistedin yhteyspooli ylläpitää pysyviä keep-alive-yhteyksiä välityspalvelinpäätepistettä kohden.
Ovatko VinaProxy-välityspalvelimet rajattomia useiden miljoonien sivujen Scrapy-töissä?
Kyllä. Kaikki Dedicated IPv4- ja Static ISP -sopimukset sisältävät rajattoman kuukausittaisen kaistanleveyden.
Skaalaa Scrapy-spiderisi rajattomilla staattisilla IP-pooleilla
Dedicated IPv4- ja Static ISP -välityspalvelimet heti saatavilla 7 maassa.
Osta Scrapy-välityspalvelimia