Lewati ke konten
RazinSaid

Dasar Web Scraping dengan Node.js (Plus Etikanya)

RS
Razin Said
5 menit baca

Pernah nggak sih kamu butuh data dari sebuah website, tapi jumlahnya ratusan dan kalau di-copy manual bisa gempor? Nah, di situlah web scraping masuk. Intinya, web scraping dengan Node.js itu teknik ngambil data dari halaman web secara otomatis pakai kode. Daripada nyalin satu-satu pakai tangan, kamu tinggal nulis program yang baca halamannya, ambil bagian yang kamu butuh, terus simpan. Kita bahas dari nol ya, lengkap sama contoh kode dan, yang sering banget dilupain orang, etikanya.

Apa Itu Web Scraping?

Gampangnya, web scraping itu proses "memanen" informasi dari situs web. Misalnya kamu pengen ngumpulin daftar harga produk, judul artikel berita, atau data cuaca. Daripada buka satu-satu halaman terus nyatet manual, si scraper yang bakal ngerjain itu buat kamu dalam hitungan detik.

Prosesnya biasanya tiga langkah:

  1. Fetch — ngunduh isi halaman (HTML mentah).
  2. Parse — baca HTML tadi terus cari bagian yang relevan.
  3. Simpan — nyimpen hasilnya ke file, database, atau spreadsheet.

Kenapa Pakai Node.js?

Ada beberapa alasan kenapa Node.js enak banget buat scraping:

  • JavaScript di mana-mana. Banyak website dibangun pakai JavaScript, jadi kalau kamu pakai bahasa yang sama, rasanya lebih nyambung.
  • Ekosistem library-nya kaya. Banyak tool siap pakai kayak axios, cheerio, sama puppeteer.
  • Cepat dan ringan. Cocok buat tugas yang isinya banyak urusan jaringan.

Menyiapkan Proyek

Pastiin dulu Node.js udah keinstall. Terus bikin folder proyek dan install dua library utama: axios buat ngunduh halaman, dan cheerio buat baca HTML-nya.

mkdir scraper-pertama
cd scraper-pertama
npm init -y
npm install axios cheerio

Jadi axios tugasnya ngambil HTML, sementara cheerio ngasih kita cara gampang buat milih elemen, mirip-mirip kayak jQuery.

Contoh Scraping Sederhana

Misalnya nih, kita mau ambil semua judul (tag h2) dari sebuah halaman. Ini kode lengkapnya:

const axios = require("axios");
const cheerio = require("cheerio");

async function ambilJudul(url) {
  try {
    // 1. Unduh HTML halaman
    const { data: html } = await axios.get(url, {
      headers: {
        // Sopan: kenalkan diri lewat User-Agent
        "User-Agent": "BelajarScraper/1.0 (proyek latihan)",
      },
    });

    // 2. Muat HTML ke cheerio
    const $ = cheerio.load(html);

    // 3. Ambil semua teks di dalam tag h2
    const judulList = [];
    $("h2").each((index, elemen) => {
      judulList.push($(elemen).text().trim());
    });

    console.log("Judul yang ditemukan:");
    console.log(judulList);
  } catch (error) {
    console.error("Gagal mengambil data:", error.message);
  }
}

ambilJudul("https://example.com");

Jalanin pakai:

node index.js

Kalau berhasil, kamu bakal lihat daftar judul kecetak di terminal. Dari sini kamu tinggal ganti selector $("h2") sama elemen lain sesuai kebutuhan, misalnya .harga buat class harga atau #judul-utama buat id tertentu.

Memahami Selector

Cheerio pakai selector CSS, jadi kalau kamu udah pernah mainan CSS, ini bakal langsung kerasa familiar:

  • $("p") milih semua paragraf.
  • $(".nama-class") milih elemen dengan class tertentu.
  • $("#nama-id") milih elemen dengan id tertentu.
  • $("a").attr("href") ngambil nilai atribut href dari sebuah link.

Cara paling gampang nyari selector yang pas: buka halaman target di browser, klik kanan elemen yang kamu mau, terus pilih Inspect.

Saat Halaman Pakai JavaScript Berat

Axios sama cheerio itu cuma baca HTML awal. Nah, kalau sebuah situs muat datanya lewat JavaScript setelah halaman kebuka (misalnya aplikasi React atau Vue), datanya kemungkinan nggak nongol di HTML mentah. Buat kasus kayak gini, kamu butuh tool yang beneran ngejalanin browser sungguhan kayak Puppeteer atau Playwright. Tapi buat pemula, mulai dari axios sama cheerio itu udah lebih dari cukup kok.

Etika dan Aturan Scraping

Bagian ini sama pentingnya sama kodenya, jadi jangan di-skip ya. Scraping yang asal-asalan bisa bikin server-mu diblokir, atau malah melanggar hukum. Ikutin aturan main berikut:

  • Cek robots.txt. Banyak situs punya file /robots.txt yang ngasih tau bagian mana yang boleh dan nggak boleh diakses bot. Hormatin itu.
  • Baca Terms of Service. Sebagian situs terang-terangan ngelarang scraping. Ya patuhi aturannya.
  • Jangan banjirin server. Kasih jeda antar request (misalnya 1–2 detik). Ngirim ribuan request sekaligus bisa bikin situs jadi lemot, dan itu ngerugiin yang punya.
  • Kenalin diri. Pakai User-Agent yang jujur, jangan nyamar jadi browser palsu buat ngibulin.
  • Hindari data pribadi. Jangan ngumpulin data pribadi orang tanpa izin. Ini soal hukum sekaligus privasi.
  • Pakai API resmi kalau ada. Kalau situsnya nyediain API, ya pakai itu. Lebih stabil, legal, dan ramah.

Intinya: scraping itu alat, dan kayak alat lainnya, pakai dengan tanggung jawab.

Menjalankan Scraper Secara Otomatis

Scraper bakal makin kepakai kalau jalan otomatis di jadwal tertentu, misalnya ngambil harga tiap pagi. Di server Linux, kamu bisa nyetel ini pakai cron. Belajar caranya di otomasi tugas dengan cron job. Kamu juga bisa nyambungin ini sama bot Telegram untuk notifikasi biar hasil scraping langsung mampir ke HP-mu.

FAQ

Apakah web scraping legal? Tergantung, sih. Ngambil data publik yang nggak dilindungi umumnya boleh, tapi kalau sampai ngelanggar Terms of Service atau ngambil data berhak cipta dan data pribadi, itu bisa jadi masalah hukum. Selalu cek aturan situsnya dulu.

Apa beda scraping dan API? API itu pintu resmi yang disediain situs buat ngambil data secara terstruktur. Kalau scraping, kamu ngambil data dari tampilan halamannya. Jadi kalau ada API, selalu utamain API.

Kenapa data yang saya cari nggak muncul? Kemungkinan halamannya muat data lewat JavaScript. Coba pakai Puppeteer, atau cek apa situsnya punya endpoint API tersembunyi yang bisa diakses langsung.

Penutup

Web scraping dengan Node.js itu gampang dipelajari: cukup axios buat ngambil dan cheerio buat baca. Tapi inget, punya kekuatan berarti punya tanggung jawab juga. Satu tips praktis terakhir: selalu mulai dengan jeda antar request dan batasi jumlah halaman pas pertama kali nyoba, biar kamu nggak ngebebanin server orang secara nggak sengaja.

Bagikan: XWhatsAppFacebookLinkedIn

Artikel terkait