Cara mengatur dan merotasi proxy di Python Scrapy
Diperbarui:
Mesin asinkron Twisted pada Scrapy menyertakan HttpProxyMiddleware bawaan (berjalan pada prioritas 750) yang secara otomatis membaca string http://user:pass@ip:port pada request.meta['proxy']. Hanya dengan menulis Downloader Middleware kustom sepanjang 10 baris pada prioritas 740, spider Anda dapat merotasi permintaan ke seluruh pool IP statis tanpa batas kuota dari VinaProxy secara otomatis.
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 proxy Scrapy dan konfigurasi konkurensi
Karena HttpProxyMiddleware bawaan berjalan pada prioritas 750 untuk memisahkan user:pass dari URL proxy dan mengonversinya menjadi header Proxy-Authorization, setiap middleware kustom yang mengatur request.meta['proxy'] harus berjalan dengan nomor lebih rendah (misalnya 740):
| Pengaturan Scrapy | Nilai Rekomendasi | Fungsi dan Alasan Teknis |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Mengarahkan permintaan jaringan melalui titik proxy VinaProxy yang dipilih |
| Prioritas Middleware | 740 (sebelum 750) | Memastikan HttpProxyMiddleware dapat mengodekan header autentikasi |
CONCURRENT_REQUESTS_PER_IP | 2 hingga 4 | Membatasi soket simultan per IP proxy untuk menghindari blokir HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Menyesuaikan jeda crawl secara dinamis sesuai latensi server target |
Praktik terbaik untuk crawling Scrapy volume tinggi
- Muat daftar proxy VinaProxy di metode
from_crawler()dan aturrequest.meta['proxy'] = random.choice(self.proxies)di dalamprocess_request() - Aktifkan
RANDOMIZE_DOWNLOAD_DELAY = Truebersama denganDOWNLOAD_DELAY = 1.0agar interval permintaan tiap IP tidak terbaca seperti pola bot - Saat terjadi percobaan ulang (
429atau503), ambil proxy berbeda dari pool Anda sebelum memasukkan kembali permintaan ke antrean
Langkah demi langkah
- 1
Format pool proxy Anda menjadi http://user:pass@ip:port
Tempel daftar proxy VinaProxy Anda ke Alat Konversi Format Proxy kami untuk mendapatkan string URL siap pakai.
- 2
Buat ProxyPoolMiddleware di file middlewares.py
Definisikan
process_request(self, request, spider)denganrequest.meta['proxy'] = random.choice(self.proxies). - 3
Daftarkan dengan prioritas 740 di settings.py
Tambahkan
'myproject.middlewares.ProxyPoolMiddleware': 740padaDOWNLOADER_MIDDLEWARESdan setelCONCURRENT_REQUESTS_PER_IP = 2. - 4
Uji dengan scrapy shell atau perintah crawl
Jalankan request percobaan ke
https://vinaproxy.com/api/my-ipuntuk memastikan rotasi IP dan autentikasi berjalan sempurna.
Pertanyaan umum
Mengapa middleware proxy Scrapy kustom saya gagal saat diatur ke prioritas 800?
Middleware bawaan Scrapy HttpProxyMiddleware berjalan pada prioritas 750. Jika middleware Anda disetel pada 800 (setelah 750), kredensial user:pass pada URL tidak akan pernah diubah menjadi header Proxy-Authorization. Selalu tentukan prioritas di bawah 750 (seperti 740).
Apakah Scrapy mempertahankan koneksi persisten ke setiap proxy?
Ya. Connection pool Twisted mempertahankan koneksi persisten TCP keep-alive ke tiap titik akhir proxy untuk menghemat waktu handshake.
Apakah proxy VinaProxy memiliki batasan kuota untuk pekerjaan Scrapy jutaan halaman?
Tidak. Seluruh paket IPv4 Dedicated dan ISP Statis VinaProxy sudah termasuk kuota transfer data bulanan tanpa batas.
Tingkatkan skala spider Scrapy Anda dengan pool IP statis tanpa kuota
Proxy IPv4 Dedicated dan ISP Statis dalam jumlah besar di 7 negara dengan pengiriman instan.
Beli Proxy Scrapy