Skip to content
advanced

Web Scraping Tingkat Lanjut dengan Proxy Residensial Rotasi Dataimpulse dan Playwright

Pelajari cara mengintegrasikan proxy residensial rotasi Dataimpulse dengan Playwright untuk membangun pipeline web scraping berskala besar yang tangguh dan mampu menangani konten dinamis serta tindakan anti-bot.

Linux HTTP(S) Web Scraping

Ringkasan

Dataimpulse menyediakan proxy residensial dan seluler yang hemat biaya dengan dukungan HTTP dan SOCKS5, ideal untuk web scraping bervolume tinggi. Saat dikombinasikan dengan Playwright, pustaka otomasi browser yang andal, Anda dapat melakukan scraping situs dinamis yang berat JavaScript sambil merotasi IP untuk menghindari pemblokiran. Tutorial ini membahas teknik lanjutan untuk mengintegrasikan proxy Dataimpulse dengan Playwright menggunakan asyncio Python untuk scraping bersamaan.

Prasyarat

  • Akun Dataimpulse dengan proxy residensial atau seluler (bayar sesuai pemakaian). Anda memerlukan host, port, nama pengguna, dan kata sandi proxy Anda.
  • Python 3.8 atau yang lebih baru.
  • Playwright terpasang: pip install playwright dan playwright install.
  • Pengetahuan dasar tentang async/await Python.

Langkah-langkah

1. Siapkan Kredensial Proxy Dataimpulse Anda

Masuk ke dasbor Dataimpulse Anda dan catat endpoint proxy Anda. Dataimpulse mendukung protokol HTTP dan SOCKS5. Untuk tutorial ini, kami akan menggunakan HTTP, tetapi Anda dapat mengganti skema dengan socks5 jika diperlukan.

Simpan kredensial Anda dalam variabel lingkungan untuk menghindari hardcoding:

export DI_PROXY_HOST="your-proxy-host.dataimpulse.com"
export DI_PROXY_PORT="12345"
export DI_PROXY_USER="your-username"
export DI_PROXY_PASS="your-password"

Ganti nilai-nilai tersebut dengan kredensial Dataimpulse Anda yang sebenarnya.

2. Instal Paket Python yang Diperlukan

Buat file Python baru, misalnya, scraper.py, dan instal paket yang diperlukan:

pip install playwright aiohttp

3. Luncurkan Playwright dengan Proxy Dataimpulse

Opsi proxy Playwright memungkinkan Anda menentukan server proxy, nama pengguna, dan kata sandi. Berikut cara meluncurkan Chromium dengan proxy Dataimpulse Anda:

import os
from playwright.async_api import async_playwright

async def scrape_with_proxy():
    async with async_playwright() as p:
        proxy_settings = {
            "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
            "username": os.getenv('DI_PROXY_USER'),
            "password": os.getenv('DI_PROXY_PASS')
        }
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        page = await browser.new_page()
        await page.goto("https://httpbin.org/ip")
        content = await page.content()
        print(content)
        await browser.close()

# Run
import asyncio
asyncio.run(scrape_with_proxy())

Jalankan skrip untuk memverifikasi bahwa IP Anda adalah IP proxy.

4. Terapkan Rotasi IP

Proxy residensial Dataimpulse merotasi IP secara otomatis pada setiap permintaan atau Anda dapat menggunakan sesi lengket (sticky session). Untuk merotasi pada setiap permintaan, cukup buat konteks browser atau halaman baru untuk setiap URL yang Anda scraping. Untuk kinerja yang lebih baik, gunakan kembali instans browser tetapi buat konteks baru per permintaan:

async def scrape_urls(urls):
    async with async_playwright() as p:
        proxy_settings = {
            "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
            "username": os.getenv('DI_PROXY_USER'),
            "password": os.getenv('DI_PROXY_PASS')
        }
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        
        for url in urls:
            context = await browser.new_context()
            page = await context.new_page()
            try:
                await page.goto(url, timeout=30000)
                # Extract data...
                print(f"Scraped {url} with new IP")
            except Exception as e:
                print(f"Error scraping {url}: {e}")
            finally:
                await context.close()
        
        await browser.close()

5. Gunakan Sesi Sticky untuk Alur Multi-Langkah

Jika Anda perlu mempertahankan IP yang sama di beberapa permintaan (misalnya, login, lalu navigasi), Dataimpulse mungkin mendukung sesi sticky melalui pengenal sesi di nama pengguna. Periksa dokumentasi Dataimpulse untuk format yang tepat. Biasanya, Anda menambahkan ID sesi ke nama pengguna seperti username-session-abc123. Berikut contohnya:

session_id = "abc123"
proxy_settings = {
    "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
    "username": f"{os.getenv('DI_PROXY_USER')}-session-{session_id}",
    "password": os.getenv('DI_PROXY_PASS')
}

6. Tangani Konkurensi dan Penanganan Kesalahan

Untuk scraping skala besar, gunakan asyncio untuk menjalankan beberapa scraper secara bersamaan. Perhatikan batas laju (rate limit) Dataimpulse dan toleransi situs target. Gunakan semaphore untuk membatasi konkurensi:

import asyncio
from asyncio import Semaphore

async def worker(url, browser, semaphore):
    async with semaphore:
        context = await browser.new_context()
        page = await context.new_page()
        try:
            await page.goto(url, timeout=30000)
            # Extract data...
            return await page.title()
        except Exception as e:
            print(f"Error: {e}")
            return None
        finally:
            await context.close()

async def main(urls):
    semaphore = Semaphore(10)  # limit to 10 concurrent pages
    async with async_playwright() as p:
        proxy_settings = {...}  # as before
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        tasks = [worker(url, browser, semaphore) for url in urls]
        results = await asyncio.gather(*tasks)
        await browser.close()
        return results

urls = ["https://example.com/page1", "https://example.com/page2"]
titles = asyncio.run(main(urls))
print(titles)

Pemecahan Masalah

  • Autentikasi proxy gagal: Periksa kembali nama pengguna/kata sandi Anda. Pastikan Anda menggunakan host dan port yang benar dari Dataimpulse.
  • Timeout atau respons lambat: Tingkatkan timeout di page.goto(). Pertimbangkan menggunakan lokasi proxy yang berbeda atau kurangi konkurensi.
  • IP diblokir: Bahkan IP residensial dapat diblokir. Terapkan penundaan, rotasi user agent, dan tangani CAPTCHA dengan baik.
  • Playwright crash di Linux: Instal dependensi yang hilang dengan playwright install-deps.

Kesimpulan

Anda telah mempelajari cara mengintegrasikan proxy residensial rotasi Dataimpulse dengan Playwright untuk web scraping tingkat lanjut. Dengan memanfaatkan otomasi browser Playwright dan kumpulan IP besar Dataimpulse, Anda dapat melakukan scraping situs dinamis dalam skala besar sekaligus meminimalkan pemblokiran. Ingatlah untuk menghormati ketentuan layanan situs target dan robots.txt.