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.
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 playwrightdanplaywright 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.