Skip to content
Advanced / 5 min read

Web Scraping Lanjutan dengan Proxy Residensial Dataimpulse dan Puppeteer di Windows

Pelajari cara mengintegrasikan proxy residensial rotasi Dataimpulse dengan Puppeteer di Windows untuk web scraping volume tinggi yang canggih. Panduan ini mencakup penyiapan, autentikasi, rotasi proxy, dan penanganan konkurensi.

Windows HTTP(S) Web Scraping

Ringkasan

Puppeteer adalah pustaka Node.js yang kuat untuk mengendalikan Chrome headless. Ketika dikombinasikan dengan proxy residensial rotasi Dataimpulse, Anda dapat melakukan scraping situs web besar tanpa diblokir. Tutorial ini menunjukkan cara menyiapkan Puppeteer di Windows untuk menggunakan proxy residensial Dataimpulse, menangani autentikasi, dan menerapkan rotasi yang efisien untuk scraping volume tinggi.

Prasyarat

  • Windows 10 atau lebih baru.
  • Node.js 14+ terinstal (unduh dari situs web resmi Node.js).
  • Akun Dataimpulse dengan kredensial proxy residensial (nama pengguna, kata sandi, endpoint).
  • Pengetahuan dasar JavaScript dan async/await.

Langkah 1: Instal Node.js dan Puppeteer

Jika belum, instal Node.js dari situs web resmi. Kemudian buat folder proyek baru dan instal Puppeteer.

mkdir dataimpulse-puppeteer
cd dataimpulse-puppeteer
npm init -y
npm install puppeteer

Langkah 2: Dapatkan Kredensial Proxy Dataimpulse

Masuk ke dasbor Dataimpulse Anda dan navigasikan ke bagian proxy residensial. Anda akan menemukan:

  • Endpoint: host dan port, mis., proxy.dataimpulse.com:12321 (periksa dasbor Anda untuk detail pastinya).
  • Nama Pengguna: nama pengguna Dataimpulse Anda.
  • Kata Sandi: kata sandi Dataimpulse Anda.

Dataimpulse menggunakan gateway rotasi, jadi setiap permintaan melalui endpoint ini akan menggunakan IP yang berbeda dari kumpulan (kecuali Anda menggunakan port sesi sticky). Untuk tutorial ini, kami akan menggunakan endpoint rotasi.

Langkah 3: Konfigurasikan Puppeteer dengan Autentikasi Proxy

Puppeteer dapat menggunakan proxy dengan memberikan argumen --proxy-server saat meluncurkan browser. Autentikasi ditangani melalui page.authenticate(). Buat file scrape.js:

const puppeteer = require('puppeteer');

const PROXY_HOST = 'YOUR_ENDPOINT_HOST'; // Replace with your Dataimpulse proxy host
const PROXY_PORT = 'YOUR_ENDPOINT_PORT'; // Replace with your Dataimpulse proxy port
const PROXY_USER = 'your_username';
const PROXY_PASS = 'your_password';

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`],
  });

  const page = await browser.newPage();
  await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });

  await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle0' });
  const content = await page.content();
  console.log(content); // Should show the proxy IP

  await browser.close();
})();

Jalankan skrip dengan node scrape.js. Anda akan melihat alamat IP yang bukan milik Anda, mengonfirmasi bahwa proxy berfungsi.

Langkah 4: Terapkan Logika Proxy Rotasi

Karena endpoint Dataimpulse memutar IP secara otomatis, Anda dapat membuat beberapa permintaan melalui instans browser yang sama dan masing-masing akan menggunakan IP yang berbeda. Namun, untuk kontrol yang lebih baik dan menghindari deteksi, Anda dapat menutup dan membuka kembali browser atau menggunakan konteks incognito. Berikut contoh yang melakukan scraping beberapa halaman dengan rotasi:

const puppeteer = require('puppeteer');

const PROXY_HOST = 'YOUR_ENDPOINT_HOST';
const PROXY_PORT = 'YOUR_ENDPOINT_PORT';
const PROXY_USER = 'your_username';
const PROXY_PASS = 'your_password';

async function scrapeWithRotation(urls) {
  const browser = await puppeteer.launch({
    headless: true,
    args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`],
  });

  const results = [];
  for (const url of urls) {
    const page = await browser.newPage();
    await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
    try {
      await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
      const title = await page.title();
      results.push({ url, title });
    } catch (error) {
      console.error(`Error scraping ${url}:`, error.message);
    } finally {
      await page.close();
    }
  }

  await browser.close();
  return results;
}

const urls = [
  'https://example.com',
  'https://example.org',
  'https://example.net',
];

scrapeWithRotation(urls).then(console.log);

Setiap halaman baru akan menggunakan IP rotasi dari kumpulan Dataimpulse.

Langkah 5: Tangani Konkurensi dan Penanganan Kesalahan

Untuk scraping volume tinggi, Anda perlu menangani konkurensi dan kesalahan dengan baik. Gunakan puppeteer-cluster untuk mengelola banyak halaman secara paralel sambil mematuhi batas memori.

npm install puppeteer-cluster
const { Cluster } = require('puppeteer-cluster');

const PROXY_HOST = 'YOUR_ENDPOINT_HOST';
const PROXY_PORT = 'YOUR_ENDPOINT_PORT';
const PROXY_USER = 'your_username';
const PROXY_PASS = 'your_password';

(async () => {
  const cluster = await Cluster.launch({
    concurrency: Cluster.CONCURRENCY_PAGE,
    maxConcurrency: 5, // Adjust based on your resources
    puppeteerOptions: {
      headless: true,
      args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}`],
    },
  });

  cluster.on('taskerror', (err, data) => {
    console.error(`Error scraping ${data}:`, err.message);
  });

  await cluster.task(async ({ page, data: url }) => {
    await page.authenticate({ username: PROXY_USER, password: PROXY_PASS });
    await page.goto(url, { waitUntil: 'domcontentloaded' });
    const title = await page.title();
    console.log(`Scraped ${url} - Title: ${title}`);
  });

  const urls = [
    'https://example.com',
    'https://example.org',
    'https://example.net',
    // Add more URLs
  ];

  for (const url of urls) {
    cluster.queue(url);
  }

  await cluster.idle();
  await cluster.close();
})();

Pengaturan ini memungkinkan Anda melakukan scraping beberapa halaman secara bersamaan sambil memanfaatkan proxy rotasi Dataimpulse.

Langkah 6: Uji dan Validasi

Jalankan skrip Anda dan verifikasi bahwa:

  • Alamat IP berubah di antara permintaan (periksa dengan https://httpbin.org/ip).
  • Tidak ada kesalahan autentikasi proxy yang terjadi.
  • Halaman target dimuat dengan benar.

Anda juga dapat mencatat IP yang digunakan untuk setiap permintaan untuk memastikan rotasi berfungsi.

Pemecahan Masalah

  • 407 Proxy Authentication Required: Periksa kembali nama pengguna dan kata sandi Anda. Pastikan Anda menggunakan metode autentikasi yang benar (page.authenticate()).
  • Koneksi timeout: Tingkatkan opsi timeout di page.goto(). Juga, pastikan endpoint dan port proxy Anda benar.
  • Peluncuran browser gagal dengan error proxy: Pastikan argumen --proxy-server menggunakan format yang benar: http://host:port (tanpa kredensial di URL).
  • Rotasi tidak berfungsi: Endpoint rotasi Dataimpulse harus memberikan IP baru untuk setiap koneksi baru. Jika Anda memerlukan sesi sticky, gunakan port sticky khusus yang disediakan di dasbor Anda.

Ringkasan

Anda telah mempelajari cara mengintegrasikan proxy residensial Dataimpulse dengan Puppeteer di Windows untuk web scraping lanjutan. Dengan memanfaatkan autentikasi proxy Puppeteer dan kumpulan IP rotasi Dataimpulse, Anda dapat membangun scraper yang dapat diskalakan yang menghindari blokir IP. Ingatlah untuk menangani kesalahan, mengelola konkurensi, dan menghormati ketentuan layanan situs web.