Skip to content
Intermediate / 4 min read

Proxy Rotasi Python Requests: Cara Merotasi IP untuk Web Scraping (dan Kapan Gateway WireGuard Lebih Baik)

Pelajari cara merotasi proxy di Python requests untuk web scraping yang andal, termasuk dukungan SOCKS5, penanganan sesi, dan pemulihan kesalahan. Bandingkan proxy rotasi dengan gateway WireGuard khusus untuk kebutuhan IP yang stabil.

SOCKS5 WireGuard Web Scraping Privasi/Anonimitas

Ringkasan

Proxy rotasi dengan Python requests adalah cara umum untuk mendistribusikan permintaan web scraping ke beberapa alamat IP, mengurangi kemungkinan pembatasan laju atau pemblokiran. Tutorial ini menunjukkan cara mengimplementasikan rotasi proxy di Python requests, termasuk proxy HTTP dan SOCKS5, logika percobaan ulang, dan verifikasi. Ini juga menjelaskan kapan gateway WireGuard khusus (seperti NordLayer) lebih cocok daripada proxy rotasi.

Prasyarat

  • Python 3.8 atau lebih baru terinstal.
  • Pustaka requests.
  • Untuk proxy SOCKS5, instal requests[socks] yang mencakup PySocks.
  • Daftar server proxy (HTTP, HTTPS, atau SOCKS5) dari penyedia.

Cara Kerja Rotasi Proxy dengan Python Requests

requests mendukung proxy melalui parameter proxies. Setiap permintaan dapat menggunakan proxy yang berbeda jika Anda merotasi proxy sebelum memanggil requests.get(). Untuk SOCKS5, skemanya adalah socks5:// atau socks5h:// (untuk menyelesaikan DNS melalui proxy).

Langkah-langkah

  1. Instal pustaka yang diperlukan.
    pip install requests requests[socks]
    
  2. Siapkan daftar proxy Anda. Simpan kredensial di variabel lingkungan atau file konfigurasi, bukan di kode sumber.
    import os
    proxies_list = [
        'http://user:[email protected]:8080',
        'http://user:[email protected]:8080',
        'socks5://user:[email protected]:1080',
    ]
    
  3. Pilih strategi rotasi. Yang paling sederhana adalah bergilir melalui daftar.
    from itertools import cycle
    proxy_pool = cycle(proxies_list)
    
  4. Kirim permintaan dengan proxy rotasi. Sertakan batas waktu dan tangani pengecualian.
    import requests
    url = 'https://httpbin.org/ip'
    for i in range(5):
        proxy = next(proxy_pool)
        try:
            resp = requests.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10)
            print(resp.json())
        except requests.exceptions.RequestException as e:
            print(f'Proxy {proxy} gagal: {e}')
    
  5. Untuk rotasi yang lebih kuat, gabungkan rotasi dengan logika percobaan ulang menggunakan requests.Session dan HTTPAdapter.
    from requests.adapters import HTTPAdapter
    from urllib3.util.retry import Retry
    
    session = requests.Session()
    retries = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504])
    session.mount('http://', HTTPAdapter(max_retries=retries))
    session.mount('https://', HTTPAdapter(max_retries=retries))
    
    proxy = next(proxy_pool)
    resp = session.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10)
    print(resp.json())
    
  6. Verifikasi bahwa IP berubah. Endpoint https://httpbin.org/ip mengembalikan IP asal. Catat atau cetak untuk setiap permintaan.
  7. Terapkan pemeriksaan kesehatan. Hapus proxy yang gagal berulang kali dari kumpulan.
    def is_proxy_alive(proxy):
        try:
            requests.get('https://httpbin.org/ip', proxies={'http': proxy, 'https': proxy}, timeout=5)
            return True
        except requests.exceptions.RequestException:
            return False
    
    healthy_proxies = [p for p in proxies_list if is_proxy_alive(p)]
    

Pemecahan Masalah Umum

  • 407 Proxy Authentication Required: Periksa nama pengguna dan kata sandi di URL proxy. Enkode persen karakter khusus.
  • Kesalahan koneksi SOCKS5: Pastikan Anda menginstal requests[socks] dan URI proxy menggunakan socks5:// atau socks5h://.
  • Kesalahan SSL: Beberapa proxy tidak mendukung terowongan HTTPS. Gunakan proxy HTTP hanya untuk target HTTP, atau beralih ke penyedia yang mendukung CONNECT.
  • Respons lambat: Tingkatkan batas waktu, kurangi konkurensi, atau gunakan proxy dengan latensi lebih rendah.
  • IP tidak berubah: Verifikasi bahwa proxy benar-benar digunakan dengan memeriksa resp.json(). Periksa juga bahwa kode Anda merotasi proxy sebelum setiap permintaan.

Kapan Gateway WireGuard Khusus Lebih Masuk Akal

Proxy rotasi ideal untuk scraping anonim skala besar di mana setiap permintaan dapat berasal dari IP yang berbeda. Namun, beberapa tugas memerlukan alamat IP yang stabil dan khusus:

  • Mempertahankan sesi yang sudah masuk di situs yang menandai perubahan IP.
  • Pelacakan peringkat SEO dari lokasi tetap.
  • Mengakses alat atau API internal dengan daftar putih IP. Untuk kasus ini, gateway WireGuard khusus seperti NordLayer menyediakan terowongan VPN yang stabil dan kelas bisnis dengan penagihan bulanan tetap. NordLayer menawarkan gateway khusus, sehingga tim Anda mendapatkan IP yang konsisten untuk akses jaringan yang aman. Ini bukan layanan proxy rotasi, tetapi melengkapi proxy rotasi dengan mencakup kasus penggunaan yang memerlukan IP keluar tetap.

Ringkasan

Anda dapat merotasi proxy di Python requests dengan bergilir melalui daftar proxy, menangani pengecualian, dan memverifikasi IP asal. Untuk SOCKS5, instal requests[socks]. Gunakan logika percobaan ulang dan pemeriksaan kesehatan untuk menjaga scraping tetap andal. Ketika Anda memerlukan IP yang stabil dan khusus alih-alih rotasi, pertimbangkan gateway WireGuard khusus seperti NordLayer untuk akses tim dan tugas dengan IP tetap.