IMPORTHTML & IMPORTXML: Scraping Data ke Google Sheets
TL;DR
IMPORTHTML narik tabel atau list dari halaman web ke Google Sheets pakai satu rumus, sementara IMPORTXML bisa ngambil elemen apa pun dari halaman lewat XPath. Keduanya update otomatis tiap sekitar sejam, jadi datamu tetap segar tanpa copy-paste manual. Batasannya: keduanya cuma bisa baca HTML mentah, jadi halaman yang isinya dimuat pakai JavaScript nggak bakal kebaca.
IMPORTHTML dan IMPORTXML adalah dua fungsi Google Sheets yang narik data langsung dari halaman web ke spreadsheet kamu.
Jadi kalau kamu selama ini copy-paste tabel kurs, harga komoditas, atau data BPS tiap minggu — kerjaan itu bisa hilang.
Datanya update sendiri tiap sekitar sejam. Di bawah ini cara pakainya, plus error yang bikin 90% orang nyerah di percobaan pertama.
Apa itu IMPORTHTML dan IMPORTXML?
IMPORTHTML narik tabel atau list dari halaman web ke Google Sheets. IMPORTXML narik elemen apa pun dari halaman lewat XPath — bisa harga, judul, link, atau teks di dalam tag tertentu.
Bedanya gampang diinget:
| IMPORTHTML | IMPORTXML | |
|---|---|---|
| Bisa ambil apa | Cuma tabel & list | Elemen apa pun |
| Susah nggak | Gampang | Perlu XPath |
| Kapan dipakai | Data udah berbentuk tabel | Data kesebar di halaman |
Aturan praktisnya: coba IMPORTHTML dulu. Kalau gagal, baru pindah ke IMPORTXML.
Gimana cara pakai IMPORTHTML?
Sintaksnya:
=IMPORTHTML(url, "table", nomor)
Tiga isian:
- url — alamat halamannya, dalam tanda kutip.
- "table" atau "list" — mau ambil tabel atau daftar.
- nomor — tabel keberapa di halaman itu. Mulai dari 1.
Contoh, narik tabel dari halaman Wikipedia:
=IMPORTHTML("https://id.wikipedia.org/wiki/Daftar_provinsi_di_Indonesia", "table", 1)
Sekali Enter, seluruh tabel masuk ke sheet kamu.
Masalah paling sering: kamu nggak tau tabelnya nomor berapa. Halaman bisa punya 8 tabel, dan yang kamu mau ada di urutan ke-4.
Caranya nyari: coba nomor 1, kalau salah ganti 2, terus sampai ketemu. Atau bikin 5 rumus sekaligus di 5 sheet berbeda, lihat mana yang bener.
Gimana cara pakai IMPORTXML?
Sintaksnya:
=IMPORTXML(url, xpath)
XPath itu alamat elemen di dalam halaman HTML. Kedengeran serem, tapi yang kepakai sehari-hari cuma sedikit.
XPath yang paling sering dipakai
| Mau ambil | XPath |
|---|---|
| Semua judul H2 | //h2 |
| Semua link | //a/@href |
| Teks di dalam class tertentu | //*[@class='harga'] |
| Teks di dalam id tertentu | //*[@id='total'] |
| Judul halaman | //title |
| Semua paragraf | //p |
| Elemen di dalam elemen | //div[@class='produk']//span |
Contoh nyata — narik semua judul artikel dari halaman blog:
=IMPORTXML("https://contoh.com/blog", "//h2[@class='judul-artikel']")
Atau narik semua link-nya sekalian:
=IMPORTXML("https://contoh.com/blog", "//h2[@class='judul-artikel']/a/@href")
Cara nyari XPath yang bener
- Buka halamannya di Chrome.
- Klik kanan elemen yang kamu mau → Inspect.
- Klik kanan lagi di baris HTML yang keblok → Copy → Copy XPath.
- Tempel ke rumus, ganti tanda kutip ganda jadi tunggal kalau ada.
Peringatan: XPath hasil Copy XPath biasanya panjang dan rapuh, kayak /html/body/div[3]/div[2]/ul/li[1]. Begitu situsnya ganti layout, rumus kamu mati. Lebih aman pakai class atau id.
Contoh kasus: pantau harga bahan pokok buat toko_berkah
Toko_berkah — UMKM retail 3 cabang di dataset ngulikdata — punya masalah klasik: harga beli sembako dari supplier berubah-ubah, dan pemiliknya baru sadar margin tipis pas bulanan udah lewat.
Dulu caranya: staf buka situs harga pangan tiap pagi, catat manual di buku. Butuh sekitar 15 menit sehari, dan sering keloncat pas lagi ramai.
Sekarang pakai satu rumus:
=IMPORTHTML("https://www.bi.go.id/hargapangan", "table", 1)
Ditambah kolom pembanding harga jual toko:
=ARRAYFORMULA(IF(B2:B="", "", ROUND((C2:C - B2:B) / C2:C * 100, 1)))
Hasilnya di kolom margin persen, update otomatis tiap jam.
Angka yang ketemu setelah 3 bulan jalan:
- Harga beli beras medium naik 8,4% dari Januari ke Maret, tapi harga jual toko cuma naik 2%.
- Margin beras — kategori terlaris di toko — turun dari 14,2% jadi 8,9%.
- Dengan volume 1.240 karung per bulan, potensi cuan yang ilang sekitar Rp11,6 juta per bulan.
Yang bikin kaget bukan angkanya, tapi lamanya nggak ketahuan. Tiga bulan margin nyusut pelan-pelan, dan nggak ada yang nyadar karena omzetnya keliatan tetap naik.
Satu rumus IMPORTHTML ganti 15 menit kerja manual per hari, dan nemuin kebocoran Rp11,6 juta sebulan.
Kenapa IMPORTXML saya error #N/A?
Ini bagian yang bikin orang nyerah. Ada 4 penyebab utama.
1. Halamannya dimuat pakai JavaScript
Ini penyebab nomor satu. Google Sheets cuma baca HTML mentah yang dikirim server. Kalau isinya baru muncul setelah JavaScript jalan, Sheets nggak lihat apa-apa.
Cara ceknya: buka halamannya, klik kanan → View Page Source (bukan Inspect). Cari teks yang kamu mau pakai Ctrl+F. Kalau nggak ketemu di situ, IMPORTXML nggak bakal bisa.
Solusinya: cari halaman lain, atau pakai Apps Script dengan API kalau situsnya nyediain.
2. XPath-nya salah
Tes dulu XPath-nya di Chrome. Buka Console (F12), ketik:
$x("//h2[@class='judul']")
Kalau balikannya array kosong, XPath kamu salah.
3. Situsnya blokir permintaan Google
Beberapa situs nolak permintaan dari server Google. Nggak ada workaround-nya di Sheets — kamu harus pakai tool lain.
4. Tanda kutip berantakan
XPath sering ngandung tanda kutip. Kalau XPath-nya pakai kutip ganda dan rumusnya juga, rumusnya rusak.
Solusi: pakai kutip tunggal di dalam XPath.
Salah: =IMPORTXML(A1, "//div[@class="harga"]")
Bener: =IMPORTXML(A1, "//div[@class='harga']")
Kesalahan umum & tips
Numpuk 50 rumus IMPORT di satu file. Spreadsheet kamu bakal lemot dan sering nyangkut di status "Loading...". Kalau butuh banyak halaman, pakai Apps Script yang nyimpen hasilnya ke sel biasa.
Lupa bungkus pakai IFERROR. Situs down sebentar, sheet kamu penuh #N/A dan chart-nya rusak. Bungkus: =IFERROR(IMPORTHTML(...), "Gagal ambil data").
Nge-scrape halaman yang butuh login. Nggak bisa. Google Sheets nggak bawa cookie kamu.
Nggak nyimpen salinan datanya. Kalau situsnya ganti layout, rumus mati dan data historis kamu ikut ilang. Copy-paste-special (values only) ke sheet arsip tiap bulan.
Ngambil data pribadi orang. Jangan. Cek robots.txt dan Terms of Service situs sebelum scraping. Detail fungsinya bisa kamu baca di dokumentasi resmi Google Sheets.
FAQ
Apa bedanya IMPORTHTML sama IMPORTXML?
IMPORTHTML cuma bisa ngambil tabel dan list, sintaksnya gampang — cukup URL dan nomor tabel. IMPORTXML bisa ngambil elemen apa pun (harga, judul, link) tapi kamu harus nulis XPath. Pakai IMPORTHTML kalau datanya udah berbentuk tabel rapi.
Kenapa IMPORTXML saya error #N/A imported content is empty?
Penyebab paling sering: halamannya dimuat pakai JavaScript. Google Sheets cuma baca HTML mentah, jadi isi yang muncul setelah script jalan nggak kebaca. Cek pakai View Page Source, bukan Inspect Element.
Berapa sering data IMPORTXML diperbarui?
Google Sheets nge-refresh kira-kira tiap sejam sekali otomatis. Kamu nggak bisa atur intervalnya lewat setting biasa. Kalau butuh lebih cepat, pakai Apps Script yang jalan sesuai jadwal.
Apakah scraping pakai Google Sheets itu legal?
Tergantung situs dan datanya. Ambil data publik yang nggak dilindungi login, dan cek robots.txt sama Terms of Service. Jangan pernah scraping data pribadi orang. Buat data pemerintah kayak BPS, biasanya boleh karena emang disediain buat publik.
Berapa batas jumlah rumus IMPORTXML dalam satu file?
Google nggak nyebut angka pastinya. Dari yang aku coba, di atas sekitar 50 rumus IMPORT dalam satu file, spreadsheet mulai lemot dan sering nyangkut di status Loading. Buat banyak halaman, pakai Apps Script.
Coba sekarang
Tiga hal yang perlu nempel:
- Coba IMPORTHTML dulu. Kalau datanya udah tabel, kamu selesai dalam 30 detik.
- IMPORTXML butuh XPath. Pakai class atau id, jangan Copy XPath dari Chrome — itu rapuh.
- Kalau error #N/A, cek dulu View Page Source. Halaman JavaScript nggak bisa di-scrape dari Sheets.
Buka satu halaman yang datanya kamu copy-paste rutin, terus ganti pakai IMPORTHTML. Lima menit, dan kerjaan mingguan kamu hilang.
Habis narik datanya, rapiin pakai fungsi QUERY atau ARRAYFORMULA — kombinasi ini yang bikin sheet kamu jalan sendiri tanpa disentuh.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel Terkait
Template Laporan Penjualan Excel: Struktur yang Dipakai Analis
Template laporan penjualan yang bener cuma butuh 3 sheet. Yang bikin laporan orang rusak biasanya karena data mentah dan hasil dicampur di satu tempat.
Cara Menghubungkan Google Sheets ke Looker Studio
Nyambungin Google Sheets ke Looker Studio cuma butuh 5 menit. Yang bikin lama itu datanya belum rapi. Ini urutan yang bener.
Cara Share Google Sheets dengan Aman: Permission & Protected Range
Panduan step by step share Google Sheets tanpa bikin rumus kehapus atau data gaji bocor — dari level permission, protected range, sampai audit siapa yang buka.