Cara Menggunakan Proxy Residensial Dataimpulse dengan Node.js dan Axios untuk Web Scraping (Panduan Pemula untuk Windows, macOS, dan Linux)
Panduan ramah pemula yang bisa disalin-tempel untuk merutekan permintaan Node.js melalui proxy residensial bayar-sesuai-pemakaian Dataimpulse dengan Axios dan Cheerio, termasuk verifikasi IP keluar, percobaan ulang, batas konkurensi, dan varian SOCKS5.
Ringkasan
Dataimpulse adalah penyedia proxy bayar-sesuai-pemakaian yang menawarkan IP residensial dan mobile dari kumpulan 90M+ alamat melalui HTTP dan SOCKS5. Karena penagihan mengikuti lalu lintas yang benar-benar Anda gunakan, bukan paket bulanan tetap, ini cocok untuk web scraping bervolume tinggi dan pengumpulan data berskala besar dengan pola pemakaian yang melonjak-lonjak.
Tutorial ini merutekan permintaan Node.js melalui endpoint residensial Dataimpulse menggunakan Axios dan Cheerio, lalu memperkuat skrip dengan percobaan ulang dan batas konkurensi. Kode berperilaku identik di Windows, macOS, dan Linux; hanya perintah shell untuk menyetel variabel lingkungan yang berbeda. Pola yang sama berfungsi dengan penyedia mana pun yang memberikan host gateway, port, dan nama pengguna/kata sandi.
Pada akhirnya Anda akan dapat:
- Memasang paket Node.js yang diperlukan untuk scraping yang sadar proxy.
- Menjauhkan kredensial Dataimpulse dari file sumber Anda.
- Memverifikasi bahwa permintaan keluar melalui proxy.
- Melakukan scraping dan mengurai halaman dengan Cheerio.
- Menambahkan percobaan ulang, backoff, dan batas konkurensi.
- Mengalihkan klien yang sama dari HTTP ke SOCKS5.
Yang Anda butuhkan
- Node.js 18 atau lebih baru dengan npm
- Akun Dataimpulse dengan kredit bayar-sesuai-pemakaian
- Host gateway, port, dan nama pengguna/kata sandi dari dasbor Dataimpulse Anda
- Halaman target yang diizinkan untuk Anda scraping
Pilih jenis endpoint
| Endpoint | Paling cocok untuk | Paket agen Node.js |
|---|---|---|
| Proxy HTTP(S) | Axios, Fetch, dan sebagian besar pustaka scraping HTTP | https-proxy-agent |
| SOCKS5 | Alat yang mengharapkan SOCKS, atau satu agen untuk semua lalu lintas keluar | socks-proxy-agent |
Mulailah dengan endpoint HTTP kecuali sebuah pustaka menolak konfigurasi proxy.
Langkah-langkah
1. Buat proyek
mkdir dataimpulse-axios-scraper
cd dataimpulse-axios-scraper
npm init -y
2. Pasang dependensi
npm install axios cheerio https-proxy-agent
Tambahkan agen SOCKS5 hanya jika Anda berencana menggunakan langkah 7:
npm install socks-proxy-agent
3. Setel kredensial Dataimpulse sebagai variabel lingkungan
Menjauhkan kredensial dari file sumber mencegahnya bocor ke repositori atau tangkapan layar yang dibagikan. Salin nilai host, port, nama pengguna, dan kata sandi dari dasbor Dataimpulse Anda.
macOS dan Linux:
export PROXY_HOST="your-gateway-host"
export PROXY_PORT="your-gateway-port"
export PROXY_USER="your-username"
export PROXY_PASS="your-password"
Windows PowerShell:
$env:PROXY_HOST = "your-gateway-host"
$env:PROXY_PORT = "your-gateway-port"
$env:PROXY_USER = "your-username"
$env:PROXY_PASS = "your-password"
Nilai-nilai ini hanya berlaku untuk sesi terminal saat ini. Jika kata sandi Anda mengandung @, :, atau /, skrip di bawah meng-URL-encode-nya dengan encodeURIComponent, sehingga Anda dapat menempelkannya apa adanya.
4. Pastikan IP keluar
Buat file bernama check-ip.js:
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');
const proxyUrl = `http://${process.env.PROXY_USER}:${encodeURIComponent(process.env.PROXY_PASS)}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;
const client = axios.create({
httpsAgent: new HttpsProxyAgent(proxyUrl),
proxy: false,
timeout: 20000,
});
(async () => {
const { data } = await client.get('https://api.ipify.org?format=json');
console.log('Exit IP:', data.ip);
})();
Jalankan beberapa kali:
node check-ip.js
Jika gateway merotasi IP keluar, Anda akan melihat alamat berbeda pada setiap kali dijalankan, yang merupakan perilaku normal untuk lalu lintas residensial. Jika Anda memerlukan beberapa permintaan keluar dari alamat yang sama, gunakan format parameter sesi atau sticky yang didokumentasikan di dasbor Dataimpulse Anda alih-alih mencoba mematok IP di dalam skrip. Menyetel proxy: false memang disengaja: agen eksplisit menangani penerowongan, dan membiarkan deteksi otomatis proxy Axios tetap aktif dapat menimbulkan konflik dengannya.
5. Scrape halaman dan uraikan
Buat scrape.js. Versi ini menambahkan User-Agent yang deskriptif, header Accept-Language, dan helper percobaan ulang:
const axios = require('axios');
const { load } = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');
const proxyUrl = `http://${process.env.PROXY_USER}:${encodeURIComponent(process.env.PROXY_PASS)}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;
const client = axios.create({
httpsAgent: new HttpsProxyAgent(proxyUrl),
proxy: false,
timeout: 20000,
headers: {
'User-Agent': 'Mozilla/5.0 (compatible; ProxyScoutExample/1.0)',
'Accept-Language': 'en-US,en;q=0.9',
},
});
async function getWithRetry(url, attempts = 3) {
for (let i = 1; i <= attempts; i++) {
try {
return await client.get(url);
} catch (error) {
const status = error.response && error.response.status;
const retryable = !status || status === 429 || status >= 500;
if (!retryable || i === attempts) throw error;
const backoff = 1000 * 2 ** (i - 1);
console.warn(`Attempt ${i} failed (${status || error.code}); retrying in ${backoff} ms`);
await new Promise((resolve) => setTimeout(resolve, backoff));
}
}
}
(async () => {
const { data: html } = await getWithRetry('https://example.com/');
const $ = load(html);
console.log('Title:', $('title').text().trim());
$('a').slice(0, 5).each((index, element) => {
console.log('Link:', $(element).attr('href'));
});
})();
node scrape.js
Kegagalan autentikasi (HTTP 407) dan sebagian besar respons 4xx dianggap tidak dapat dicoba ulang, karena mengulangi permintaan yang sama dengan kredensial yang sama biasanya menghasilkan hasil yang sama. Kesalahan jaringan sementara, respons 429, dan respons 5xx dicoba ulang dengan backoff eksponensial.
6. Tambahkan batas konkurensi alih-alih mengirim semuanya sekaligus
Gateway yang merotasi menangani perubahan IP untuk Anda, jadi risiko utama pada pekerjaan Anda adalah menghantam satu target terlalu cepat. Proses URL dalam batch kecil dan turunkan ukuran batch jika Anda mulai melihat respons 403 atau 429:
async function scrapeAll(urls, concurrency = 4) {
const results = [];
for (let i = 0; i < urls.length; i += concurrency) {
const batch = urls.slice(i, i + concurrency);
const settled = await Promise.allSettled(batch.map((url) => getWithRetry(url)));
results.push(...settled);
}
return results;
}
Mulailah dengan konkurensi 2 hingga 4 untuk target baru, pantau tingkat kegagalan, dan baru kemudian tingkatkan. Proses yang lebih lambat tetapi selesai lebih murah daripada proses cepat yang diblokir, terutama pada penagihan bayar-sesuai-pemakaian di mana permintaan yang gagal tetap mengonsumsi lalu lintas.
7. Opsional: alihkan klien yang sama ke SOCKS5
Jika pustaka atau alat CLI hanya menerima SOCKS, ganti agen. Gunakan port SOCKS5 dari dasbor Dataimpulse Anda, bukan port HTTP:
const { SocksProxyAgent } = require('socks-proxy-agent');
const socksUrl = `socks5://${process.env.PROXY_USER}:${encodeURIComponent(process.env.PROXY_PASS)}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;
const agent = new SocksProxyAgent(socksUrl);
const client = axios.create({
httpAgent: agent,
httpsAgent: agent,
proxy: false,
timeout: 20000,
});
Menetapkan agen yang sama ke httpAgent dan httpsAgent menjaga target HTTP biasa dan HTTPS tetap konsisten, yang penting saat scraping mengikuti pengalihan lintas kedua skema.
Pemecahan masalah
| Gejala | Kemungkinan penyebab | Perbaikan |
|---|---|---|
407 Proxy Authentication Required |
Nama pengguna/kata sandi salah atau tidak ada | Periksa ulang kredensial dasbor dan pastikan URL-encoding karakter khusus |
ECONNREFUSED atau timeout langsung saat koneksi |
Port salah, atau port HTTP digunakan untuk permintaan SOCKS5 | Cocokkan port dengan protokol yang Anda pilih |
| URL HTTP berfungsi, URL HTTPS gagal | Axios menggunakan penanganan proxy bawaannya alih-alih agen | Gunakan https-proxy-agent dan setel proxy: false |
Sering 403 atau 429 dari situs target |
Laju permintaan terlalu tinggi untuk host tersebut | Kurangi konkurensi ke 1 atau 2, tingkatkan backoff, jaga header tetap realistis |
| Permintaan berhasil di browser tetapi gagal di Node | Browser dan terminal memiliki pengaturan proxy berbeda | Ekspor ulang variabel lingkungan di terminal yang menjalankan skrip |
| Peringatan sertifikat atau TLS muncul | TLS dicegat atau tidak cocok | Jangan nonaktifkan validasi sertifikat; verifikasi URL target dan konfigurasi proxy |
Ringkasan
Anda menyiapkan proyek Node.js yang mengirim permintaan Axios melalui proxy residensial Dataimpulse, memverifikasi IP keluar, mengurai HTML dengan Cheerio, dan menambahkan percobaan ulang, backoff, serta batas konkurensi. Karena gateway merotasi IP keluar untuk Anda, upaya rekayasa sebaiknya dialokasikan untuk pengaturan laju, penanganan kesalahan, dan observabilitas alih-alih pengalihan IP secara manual. Untuk proses pertama, pastikan IP keluar, scrape satu halaman, lalu tingkatkan konkurensi secara bertahap sambil memantau tingkat kegagalan dan konsumsi lalu lintas Anda. Selalu hormati ketentuan layanan situs target, arahan robots, dan hukum yang berlaku saat mengumpulkan data.
Bacaan terkait di ProxyScout.net: proxy residensial berotasi dalam skala besar, scraping berbasis Python dengan Dataimpulse, dan mengonfigurasi proxy Dataimpulse dengan Proxifier di Windows.