scrapy rotating proxies

Rotating proxy Scrapy adalah endpoint IP yang digunakan secara bergiliran oleh spider Scrapy agar request berurutan keluar dari alamat yang berbeda, sehingga kemungkinan terkena rate limit dan IP ban berkurang. Tutorial ini menunjukkan cara menambahkan rotating proxy scrapy ke proyek nyata menggunakan middleware scrapy-rotating-proxies serta rotating gateway residential DataImpulse, kemudian memverifikasi dan mengatasi masalah pada penyiapannya.

Anda akan menginstal middleware, mengonfigurasi settings.py, menyiapkan deteksi ban dan retry, memastikan exit IP benar-benar berubah, serta memilih antara rotating gateway dan daftar proxy statis. Setiap blok kode di bawah ini dapat dijalankan, dan batasan sebenarnya dibahas di bagian akhir.

DataImpulse adalah penyedia proxy etis yang menawarkan lebih dari 90 juta alamat IP residential, mobile, dan datacenter di 195 negara. Layanannya menggunakan model pay-as-you-go mulai 1 dolar per GB dengan lalu lintas yang tidak kedaluwarsa, serta digunakan untuk web scraping, verifikasi iklan, pemantauan harga, riset pasar, dan pengelolaan banyak akun.

Fakta Utama

  • Penyiapan: Rotating proxy Scrapy bekerja dengan mengarahkan middleware scrapy-rotating-proxies ke daftar endpoint proxy atau satu rotating gateway seperti gw.dataimpulse.com:823, sehingga setiap request dapat keluar dari IP yang berbeda.
  • Jenis proxy terbaik: rotating proxy residential, yang menggunakan IP konsumen asli agar lolos deteksi.
  • Harga: mulai 1 dolar per GB, pay-as-you-go, dengan lalu lintas yang tidak kedaluwarsa dan tanpa langganan.
  • Cakupan: Lebih dari 90 juta IP yang diperoleh secara etis di 195 negara.
  • Keandalan: Tingkat keberhasilan 99.51%, dengan nilai 4.8 dari 5 di G2.
  • Protokol dan targeting: HTTP, HTTPS, dan SOCKS5, termasuk targeting negara.
How Scrapy rotates proxies on every request

Apa yang Anda perlukan sebelum memulai dengan rotating proxy scrapy?

Anda memerlukan proyek Scrapy yang berfungsi, Python 3.8 atau lebih baru, paket scrapy-rotating-proxies, dan akses ke kumpulan endpoint proxy. Logika rotasi berada dalam downloader middleware, sehingga spider Anda tidak perlu diubah.

Siapkan hal-hal berikut sebelum menulis kode:

  • Proyek Scrapy yang dibuat dengan scrapy startproject.
  • Middleware scrapy-rotating-proxies, yaitu paket komunitas yang didokumentasikan dalam alur kerja scraping dan di-hosting di GitHub sebagai scrapy-rotating-proxies.
  • Kredensial proxy. Panduan ini menggunakan proxy residential, yang menyediakan satu rotating gateway serta dukungan HTTP, HTTPS, SOCKS5, dan targeting negara.

Instal middleware ke lingkungan proyek Anda:

pip install scrapy-rotating-proxies

Paket ini menambahkan dua middleware: RotatingProxyMiddleware, yang menetapkan proxy untuk setiap request, dan BanDetectionMiddleware, yang menentukan apakah respons tampak seperti pemblokiran lalu beralih dari IP yang gagal.

Bagaimana cara menggunakan rotating proxy di Scrapy?

Anda menambahkan scrapy-rotating-proxies dengan mendeklarasikan endpoint proxy di settings.py dan mengaktifkan dua downloader middleware-nya. Ada dua cara menyediakan proxy: daftar Python inline atau file teks yang dimuat dari path.

Pendekatan inline menggunakan ROTATING_PROXY_LIST. Aktifkan kedua middleware pada prioritas yang ditampilkan agar berjalan dalam urutan yang benar:

# settings.py
ROTATING_PROXY_LIST = [
    'http://user:[email protected]:823',
]

DOWNLOADER_MIDDLEWARES = {
    'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
    'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

Agar kredensial tidak masuk ke source control, gunakan ROTATING_PROXY_LIST_PATH dan arahkan ke file yang berisi satu proxy per baris:

# settings.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
# proxies.txt (one endpoint per line)
http://user:[email protected]:823
http://user:[email protected]:824

Gateway DataImpulse adalah alternatif satu endpoint dibandingkan memelihara daftar panjang. Karena gw.dataimpulse.com:823 sudah merotasi exit IP di sisi penyedia, Anda dapat mencantumkan satu baris tersebut dan membiarkan kedua lapisan rotasi bekerja bersama: gateway memilih IP residential baru per request, dan middleware melakukan retry dengan gateway yang sama saat respons ditandai sebagai ban. Ini adalah pola andal paling sederhana untuk sebagian besar crawling.

Jika Anda lebih memilih mengatur proxy per request alih-alih secara global, tetapkan melalui request meta dalam spider. Cara ini juga digunakan untuk menambahkan proxy authentication secara eksplisit, yang dibahas dalam panduan DataImpulse tentang proxy authentication:

import scrapy

class GatewaySpider(scrapy.Spider):
    name = 'gateway'
    urls = ['https://httpbin.org/ip']

    def start_requests(self):
        proxy = 'http://user:[email protected]:823'
        for url in self.urls:
            yield scrapy.Request(url, meta={'proxy': proxy}, dont_filter=True)

Bagaimana memverifikasi rotating proxy berfungsi di Scrapy?

Anda memverifikasi rotasi dengan mengirim beberapa request ke endpoint IP-echo dan memastikan origin IP yang dilaporkan berubah di setiap respons. httpbin.org/ip mengembalikan exit IP pemanggil, sehingga cocok untuk pemeriksaan cepat.

Tambahkan spider kecil yang mengakses endpoint echo sepuluh kali dan mencatat setiap exit IP:

import scrapy

class IPCheckSpider(scrapy.Spider):
    name = 'ipcheck'
    start_urls = ['https://httpbin.org/ip'] * 10

    def parse(self, response):
        self.logger.info('Exit IP: %s', response.json()['origin'])

Jalankan dari root proyek:

scrapy crawl ipcheck

Dalam log, Anda seharusnya melihat beberapa nilai Exit IP yang berbeda. Jika setiap baris menunjukkan alamat yang sama, rotasi tidak aktif: pastikan middleware diaktifkan, ROTATING_PROXY_LIST tidak kosong, dan request tidak dilayani dari HTTP cache. Middleware juga mencatat kesehatan proxy, jadi perhatikan baris tentang proxy baik, mati, dan diaktifkan kembali untuk memastikan kumpulan proxy dikelola.

Bagaimana mengatasi ban dan error 407 pada rotating proxy scrapy?

Sebagian besar masalah rotasi bermuara pada dua pertanyaan: apakah middleware mendeteksi ban dengan benar, dan apakah proxy authentication sudah disiapkan. Deteksi ban yang lemah membuat IP yang diblokir terus mengirim respons tidak berguna, sedangkan login yang salah konfigurasi menghasilkan HTTP 407.

Agar deteksi ban didasarkan pada aturan yang jelas, bukan tebakan, panduan ini mengusulkan model Deteksi Ban Empat Sinyal untuk Scrapy. Model ini menilai setiap respons berdasarkan empat sinyal independen agar satu false positive tidak membuang proxy yang sehat:

  • Status code: anggap 403, 429, dan 503 sebagai kandidat ban, serta 200, 301, dan 302 sebagai status sehat.
  • Target redirect: 302 ke path login, captcha, atau challenge adalah soft ban meskipun statusnya terlihat baik.
  • Fingerprint body: pindai body untuk penanda seperti captcha, akses ditolak, atau payload kosong yang tidak mungkin dikembalikan oleh halaman asli.
  • Latensi: respons yang jauh lebih lambat daripada rata-rata berjalan sering menandakan throttling sebelum pemblokiran penuh.

Enkodekan kebijakan tersebut dalam class dan daftarkan agar BanDetectionMiddleware menggunakan logika Anda, bukan default:

# ban_policy.py
class DataImpulseBanPolicy:
    NOT_BAN_STATUSES = {200, 301, 302}

    def response_is_ban(self, request, response):
        if response.status in (403, 429, 503):
            return True
        if b'captcha' in response.body.lower():
            return True
        if not response.body:
            return True
        return False

    def exception_is_ban(self, request, exception):
        return True
# settings.py
ROTATING_PROXY_BAN_POLICY = 'myproject.ban_policy.DataImpulseBanPolicy'

Padukan deteksi dengan retry dan backoff agar request yang ditandai berpindah ke IP baru alih-alih gagal. Scrapy menangani retry code, dan middleware menangani retry proxy per halaman:

# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503, 504]
ROTATING_PROXY_PAGE_RETRY_TIMES = 5

Tambahkan throttling agar kumpulan proxy tidak cepat habis. DOWNLOAD_DELAY memberi jarak antarreques, dan AUTOTHROTTLE menyesuaikan jeda dengan latensi server:

# settings.py
DOWNLOAD_DELAY = 1.0
CONCURRENT_REQUESTS = 16
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1.0
AUTOTHROTTLE_MAX_DELAY = 10.0
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0

Jika request menghasilkan HTTP 407, proxy menolak kredensial Anda, bukan situs target yang memblokir Anda. Periksa bahwa username dan password tertanam dalam proxy URL persis seperti yang diberikan dan telah di-URL-encoded jika mengandung karakter khusus. Diagnosis lengkap tersedia dalam panduan DataImpulse tentang error HTTP 407. Situs yang hanya menampilkan konten setelah eksekusi JavaScript juga memerlukan lapisan headless, yang dibahas dalam cara melakukan scraping halaman web dinamis.

Penyiapan rotating proxy mana yang cocok untuk proyek Scrapy Anda?

Gunakan rotating gateway untuk sebagian besar crawling, daftar proxy statis saat Anda perlu mengendalikan IP satu per satu, dan custom middleware hanya ketika aturan rotasi Anda tidak biasa. Pilihan ini bergantung pada seberapa besar kontrol yang Anda perlukan dibandingkan seberapa banyak infrastruktur yang ingin Anda pelihara.

Matriks keputusan berikut membuat perbandingannya lebih konkret:

  • Gunakan rotating gateway ketika Anda menginginkan variasi IP per request dengan satu endpoint, target menerapkan rate limit berdasarkan IP, dan Anda tidak ingin mengelola file proxy sama sekali.
  • Gunakan daftar proxy statis ketika Anda membutuhkan session yang dapat direproduksi, ingin mengunci region tertentu per spider, atau harus mengaudit endpoint yang digunakan secara tepat.
  • Hindari custom middleware ketika scrapy-rotating-proxies sudah memenuhi kebutuhan Anda, karena middleware khusus menambah pekerjaan pemeliharaan dan bug deteksi ban tersendiri.
  • Hindari rotating gateway ketika suatu alur kerja membutuhkan IP yang sama selama login beberapa langkah, karena sticky session adalah solusi yang tepat.

Berikut perbandingan ketiga pendekatan tersebut:

Pendekatan Kontrol rotasi Upaya penyiapan Paling cocok untuk
Rotating gateway (satu endpoint) Penyedia merotasi per request Paling rendah, satu baris di settings Crawling skala besar, rate limit berbasis IP
File daftar proxy Middleware merotasi endpoint Anda Sedang, memelihara file proxy Penguncian region, kumpulan yang dapat diaudit
Custom middleware Penuh, Anda menulis logikanya Paling tinggi, kode dan pengujian Aturan rotasi nonstandar

DataImpulse menyediakan rotasi melalui gateway-nya dan juga mendukung sticky session saat Anda memerlukan kesinambungan, sehingga banyak tim memulai dengan gateway dan menggunakan file daftar hanya untuk beberapa spider yang harus mengunci region. Jika harga dan kecepatan lebih penting daripada kepercayaan residential, proxy datacenter dan proxy mobile adalah alternatif dalam akun yang sama.

Apa batasan dan risiko rotating proxy di Scrapy?

Rotating proxy mengurangi pemblokiran berbasis IP, tetapi tidak membuat scraper tak terlihat dan tidak dapat memperbaiki spider yang berperilaku buruk. Rotasi hanyalah satu lapisan, bukan jaminan.

Perhatikan batasan berikut:

  • Rotasi tidak mengalahkan fingerprinting. Situs juga membuat profil dari header, signature TLS, dan perilaku, sehingga IP baru dengan user agent Scrapy default tetap dapat ditandai.
  • Captcha tetap muncul. Rotating IP mengurangi frekuensi kemunculannya, tetapi tidak menyelesaikannya; Anda tetap memerlukan strategi captcha atau crawling yang lebih lambat.
  • Ketidaksesuaian geo menimbulkan gangguan. Jika Anda menargetkan suatu negara tetapi meminta halaman terlokalisasi untuk region lain, respons dapat terlihat salah meskipun rotasi berfungsi.
  • Concurrency agresif dapat merugikan. Terlalu banyak request paralel menghabiskan kumpulan proxy dan meningkatkan tingkat ban, itulah sebabnya AUTOTHROTTLE penting.
  • Batasan hukum dan ketentuan tetap berlaku. Rotasi adalah alat keandalan, bukan izin; patuhi directives robots, rate limit, dan hukum yang berlaku.

Dalam hal cakupan, pahami DataImpulse dengan jelas: jaringan proxy etis berbasis opt-in dengan lebih dari 90 juta IP di 195 negara, pay-as-you-go mulai 1 dolar per GB, dan tingkat keberhasilan 99.51 persen. DataImpulse bukan scraping API terkelola yang mengembalikan data terurai, tidak menjual proxy ISP statis, dan bukan web proxy gratis. Scrapy tetap melakukan crawling; proxy hanya mengubah tempat request keluar.

Four-signal ban detection in rotating middleware

Pertanyaan yang sering diajukan

Bagaimana cara menggunakan rotating proxy di Scrapy?

Instal scrapy-rotating-proxies, tambahkan endpoint Anda ke ROTATING_PROXY_LIST atau ROTATING_PROXY_LIST_PATH di settings.py, lalu aktifkan downloader middleware RotatingProxyMiddleware dan BanDetectionMiddleware. Setelah itu, setiap request keluar dari IP yang dirotasi.

Apa perbedaan antara rotating gateway dan daftar proxy?

Rotating gateway adalah satu endpoint yang mengubah exit IP di sisi penyedia per request, sehingga Anda cukup mengonfigurasi satu baris. Daftar proxy memberi Anda banyak endpoint yang dirotasi oleh middleware, sehingga lebih baik saat Anda perlu mengunci region atau mengaudit IP tertentu.

Mengapa saya mendapatkan error HTTP 407 dengan rotating proxy scrapy?

HTTP 407 berarti proxy menolak authentication Anda, bukan situs target yang memblokir Anda. Pastikan username dan password tertanam dalam proxy URL dan telah di-URL-encoded jika mengandung karakter khusus.

Bagaimana memastikan proxy Scrapy saya benar-benar berotasi?

Kirim beberapa request ke endpoint IP-echo seperti httpbin.org/ip dan catat field origin. Jika IP yang dilaporkan berubah di setiap respons, rotasi aktif; jika tetap sama, periksa bahwa middleware diaktifkan dan HTTP cache dimatikan.

Apakah rotating proxy menghentikan semua pemblokiran scraping?

Tidak. Rotasi mengurangi rate limit dan ban berbasis IP, tetapi situs juga menggunakan fingerprinting, captcha, dan pemeriksaan perilaku. Padukan rotasi dengan jeda yang wajar, header realistis, dan AUTOTHROTTLE untuk crawling yang andal.

Kapan DataImpulse bukan pilihan yang tepat?

Jika Anda memerlukan proxy ISP statis, scraping API yang sepenuhnya terkelola, atau akses ke situs perbankan dan pemerintah, DataImpulse bukan alat yang tepat. DataImpulse berfokus pada rotating proxy residential, mobile, dan datacenter untuk mengumpulkan data publik dan mengakses konten.

Mulai menggunakan rotating proxy di Scrapy

Arahkan scrapy-rotating-proxies ke rotating gateway DataImpulse dan biarkan setiap request keluar dari IP residential baru. Anda dapat membuat akun pay-as-you-go mulai 1 dolar per GB lalu langsung memasukkan baris gateway ke settings.py Anda.


Share article: