Cara menyediakan dan memutarkan proksi dalam Python Scrapy
Updated:
Enjin Twisted tak segerak Scrapy menyertakan HttpProxyMiddleware terbina dalam (pada keutamaan 750) yang menghuraikan rentetan http://user:pass@ip:port yang diberikan kepada request.meta['proxy']. Menulis Downloader Middleware tersuai 10 baris pada keutamaan 740 membolehkan spider anda berputar merentasi kolam IP statik VinaProxy tanpa had kuota secara automatik.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
Urutan middleware proksi & tetapan konkurensi Scrapy
Oleh kerana HttpProxyMiddleware berjalan pada urutan 750 untuk mengalih keluar user:pass daripada URL proksi dan mengekod pengepala Proxy-Authorization, sebarang middleware tersuai yang menetapkan request.meta['proxy'] mesti berjalan pada nombor yang lebih rendah (cth., 740):
| Tetapan Scrapy | Nilai Disyorkan | Tujuan |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Menghalakan permintaan melalui proksi VinaProxy yang ditentukan |
| Keutamaan Middleware | 740 (sebelum 750) | Memastikan HttpProxyMiddleware mengekod pengepala user:pass |
CONCURRENT_REQUESTS_PER_IP | 2 hingga 4 | Mengehadkan soket serentak bagi setiap IP proksi untuk mengelakkan HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Menyesuaikan kelewatan rayapan secara dinamik berdasarkan latensi sasaran |
Amalan terbaik untuk rayapan Scrapy volum tinggi
- Muatkan senarai proksi VinaProxy anda dalam
from_crawler()dan tetapkanrequest.meta['proxy'] = random.choice(self.proxies)di dalamprocess_request() - Dayakan
RANDOMIZE_DOWNLOAD_DELAY = Truebersama-samaDOWNLOAD_DELAY = 1.0supaya selang permintaan setiap IP tidak kelihatan seperti robot - Semasa percubaan semula (
429atau503), pilih proksi berbeza daripada kolam anda sebelum memasukkan semula permintaan ke dalam baris gilir
Langkah demi langkah
- 1
Format kolam proksi anda sebagai http://user:pass@ip:port
Tampal senarai VinaProxy anda ke dalam Proxy Format Converter kami untuk mendapatkan rentetan URL.
- 2
Cipta ProxyPoolMiddleware dalam middlewares.py
Takrifkan
process_request(self, request, spider)untuk menetapkanrequest.meta['proxy'] = random.choice(self.proxies). - 3
Daftar pada keutamaan 740 dalam settings.py
Tambah
'myproject.middlewares.ProxyPoolMiddleware': 740di bawahDOWNLOADER_MIDDLEWARESdan tetapkanCONCURRENT_REQUESTS_PER_IP = 2. - 4
Uji dengan scrapy shell atau scrapy crawl
Jalankan permintaan ujian terhadap
https://vinaproxy.com/api/my-ipuntuk mengesahkan putaran dan pengesahan.
Soalan lazim
Mengapakah middleware proksi Scrapy tersuai saya gagal apabila ditetapkan kepada keutamaan 800?
Scrapy's built-in HttpProxyMiddleware berjalan pada keutamaan 750. Jika middleware anda berjalan pada 800 (selepas 750), kelayakan user:pass sebaris tidak akan ditukar kepada pengepala Proxy-Authorization. Sentiasa tetapkan keutamaan middleware anda di bawah 750 (seperti 740).
Adakah Scrapy mengekalkan sambungan berterusan yang terbuka ke setiap proksi?
Ya. Kolam sambungan Twisted mengekalkan sambungan keep-alive yang berterusan bagi setiap titik akhir proksi.
Adakah proksi VinaProxy tanpa had kuota untuk tugas Scrapy berjuta-juta halaman?
Ya. Semua pelan IPv4 Khusus dan ISP Statik menyertakan lebar jalur bulanan tanpa had.
Tingkatkan skala spider Scrapy anda dengan kolam IP statik tanpa had kuota
Proksi pukal segera IPv4 Khusus dan ISP Statik merentasi 7 negara.
Beli Proksi Scrapy