TL;DR
Scraping data publik kayak harga produk atau judul artikel umumnya aman selama kamu nggak nembus login, nggak bikin server kewalahan, dan nggak ngambil data pribadi. Yang bikin masalah di Indonesia itu ngumpulin data pribadi tanpa dasar yang sah, dan UU Nomor 27 Tahun 2022 tentang Pelindungan Data Pribadi ngatur ini lengkap sama sanksinya. Aturan praktis paling gampang: kalau datanya bisa dipakai buat ngenalin satu orang tertentu, jangan diambil.
Scraping data publik kayak harga produk atau judul artikel umumnya aman. Yang bikin masalah itu ngambil data pribadi, nembus halaman berpassword, atau ngirim request sebanyak itu sampai servernya terganggu.
Aku bukan pengacara, dan tulisan ini bukan nasihat hukum. Ini rangkuman rambu praktis yang aku pakai sendiri sebelum jalanin scraper, plus poin dari aturan yang berlaku di Indonesia.
Kalau proyek kamu menyentuh data orang, konsultasi ke ahli hukum tetap langkah yang bener.
Nggak ada satu pasal pun yang bilang scraping itu dilarang atau diperbolehkan secara umum. Yang dinilai bukan teknik ngambilnya, tapi tiga hal: data apa yang kamu ambil, gimana cara kamu masuk ke datanya, dan buat apa data itu dipakai. Tiga pertanyaan itu yang nentuin aman atau nggaknya.
Empat aturan yang paling sering nyentuh proyek scraping di Indonesia:
Teks lengkap peraturannya bisa kamu cek di JDIH, situs dokumentasi hukum resmi pemerintah.
UU PDP ngatur setiap kegiatan memperoleh, mengumpulkan, menyimpan, dan memakai data pribadi. Data pribadi dibagi dua: data umum kayak nama, alamat, dan nomor telepon, plus data spesifik kayak data kesehatan, biometrik, keuangan pribadi, dan data anak. Data spesifik dapat perlindungan lebih ketat.
Poin yang paling sering kelewat: pemrosesan data pribadi harus punya dasar yang sah. Persetujuan subjek data cuma salah satu dasar, dan itu yang paling susah dipenuhi kalau kamu ngambil data lewat scraping. Orang yang namanya kamu ambil dari halaman web nggak pernah ngasih persetujuan apa pun ke kamu.
Subjek data juga punya hak minta informasi, minta koreksi, minta penghapusan, dan menarik persetujuannya. Kalau kamu nyimpen data 40.000 orang hasil scraping, kamu harus siap ngelayani hak-hak itu satu per satu.
Sanksinya ada dua jalur. Jalur administratif mulai dari peringatan tertulis, penghentian sementara pemrosesan, penghapusan data, sampai denda administratif. Jalur pidana menyasar perbuatan mengumpulkan atau memakai data pribadi orang lain secara melawan hukum, dengan ancaman penjara bertahun-tahun dan denda miliaran rupiah.
| Jenis data | Contoh | Risiko |
|---|---|---|
| Data produk dan harga | Nama barang, harga, stok, kategori | Rendah |
| Data agregat publik | Statistik BPS, data terbuka pemda | Rendah |
| Konten berhak cipta | Isi artikel penuh, foto produk | Sedang, boleh dianalisis tapi jangan diterbitkan ulang |
| Ulasan pembeli | Teks ulasan plus nama akun | Sedang, buang nama dan foto profilnya |
| Profil orang | Nama, email, nomor HP, alamat | Tinggi, masuk data pribadi |
| Data di balik login | Isi dashboard, data akun | Tinggi, bisa masuk akses tanpa hak |
Aturan praktis yang aku pakai: kalau satu baris data bisa dipakai buat nunjuk satu orang tertentu, jangan diambil. Kalau terpaksa perlu, buang kolom identitasnya sejak tahap penyimpanan, bukan nanti waktu mau publikasi.
Ulasan pembeli itu contoh yang sering bikin bingung. Teks ulasannya berguna buat analisis sentimen, tapi nama akun dan foto profilnya nggak kamu butuhin sama sekali. Buang di langkah pertama, sebelum masuk penyimpanan.
Robots.txt adalah file di akar situs yang ngasih tau program otomatis bagian mana yang boleh dan nggak boleh diambil. Isinya bukan pagar teknis, jadi secara teknis bisa saja diabaikan. Tapi mengabaikannya bikin posisi kamu lemah kalau nanti ada sengketa, karena kamu udah dikasih tau dan tetap jalan terus.
User-agent: *
Disallow: /akun/
Disallow: /checkout/
Crawl-delay: 2
Baca file itu sebelum nulis kode. Penjelasan format dan aturannya ada di dokumentasi robots.txt dari Google.
Syarat layanan lebih mengikat lagi. Banyak platform besar nulis larangan pengambilan data otomatis secara eksplisit di situ. Melanggarnya bukan pidana, tapi bisa jadi dasar gugatan perdata dan pemblokiran akun.
Nggak ada angka resmi, tapi standar yang dipakai banyak orang: satu request per satu sampai tiga detik, jalanin di jam sepi, dan ikuti nilai Crawl-delay kalau robots.txt nyebutin. Beban yang bikin situs kecil melambat bisa dianggap gangguan, dan itu urusan yang beda dari sekadar ambil data.
Empat kebiasaan yang bikin scraper kamu jadi tamu yang sopan:
Poin kedua paling sering dilanggar waktu masih tahap coba-coba. Simpan HTML-nya ke file lokal, lalu latihan parsing dari file itu. Ini juga bikin proses ETL kamu jauh lebih cepat diuji.
Rancangan awal proyek pembanding harga toko_berkah itu ngambil empat hal per produk: nama barang, harga, nama penjual, dan kota penjual. Total 118 halaman, sekitar 2.100 baris.
Waktu aku cek ulang, dua kolom terakhir bermasalah. Nama penjual di banyak lapak itu nama orang asli, dan digabung sama kota, itu udah cukup buat nunjuk orang tertentu.
Rancangannya aku ubah jadi begini:
Hasil analisisnya nggak berubah sama sekali. Temuan utamanya tetap sama: 9 dari 34 SKU toko_berkah dijual lebih dari 18 persen di atas median pasar.
Dua kolom yang aku buang itu ternyata nggak pernah kepakai di analisis mana pun. Ini yang sering kejadian: data pribadi diambil bukan karena dibutuhin, tapi karena kebetulan ada di halamannya.
Kebiasaan yang aku pakai sekarang: tulis dulu daftar pertanyaan yang mau dijawab, baru tentuin kolom apa yang diambil. Bukan kebalikannya.
Nomor delapan kelihatan sepele, tapi itu yang bikin datamu bisa dipertanggungjawabkan. Tanpa tanggal, nggak ada yang bisa ngecek ulang angka kamu, dan kualitas datanya nggak bisa dinilai orang lain.
Harga produk itu informasi bisnis, bukan data pribadi, jadi risikonya jauh lebih kecil. Yang tetap harus kamu jaga: patuhi robots.txt, kasih jeda antar request, jangan nembus login, dan jangan salin seluruh isi katalog buat dijual lagi. Cek juga syarat layanan situsnya, soalnya sebagian marketplace melarang pengambilan data otomatis.
Nggak otomatis begitu. Nama dan nomor telepon yang dipajang di halaman publik tetap data pribadi menurut UU PDP, dan mengumpulkannya tetap butuh dasar pemrosesan yang sah. Publik cuma berarti bisa dilihat, bukan berarti bebas dikumpulkan, disimpan, dan dipakai buat tujuan lain.
Ada dua jalur. Sanksi administratif mencakup peringatan tertulis, penghentian sementara pemrosesan, penghapusan data, sampai denda administratif dengan batas persentase dari pendapatan tahunan. Ada juga jalur pidana buat perbuatan yang mengumpulkan atau memakai data pribadi orang lain secara melawan hukum, dengan ancaman penjara dan denda miliaran rupiah.
Beban teknisnya lebih ringan karena datanya kecil, tapi aturan soal data pribadi tetap berlaku sama. Praktik yang aman: anonimkan data sejak tahap penyimpanan, jangan pernah menampilkan identitas responden di lampiran, dan sebutkan sumber data serta tanggal pengambilannya. Kalau kampus kamu punya komite etik, ajukan dulu.
Buat data harga atau data agregat, boleh. Buat data yang mengandung nama, email, nomor telepon, atau lokasi orang, jangan. Repo publik itu diarsipkan banyak pihak, jadi data yang sekali naik hampir mustahil ditarik total. Simpan data mentahnya di lokal, dan yang di-push cukup kode plus hasil agregatnya.
Dua pertanyaan yang perlu kamu jawab sebelum nulis kode: data ini bisa dipakai buat ngenalin satu orang atau nggak, dan beban request-nya bakal ngeganggu situsnya atau nggak.
Kalau dua-duanya aman, sisanya tinggal teknis.
Cara nulis scraper-nya ada di tutorial Requests dan BeautifulSoup. Kalau kamu juga ngolah data sensitif pakai bantuan AI, batas amannya aku bahas di panduan keamanan data waktu pakai AI.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Kolom datetime nyimpen tanggal, jam, hari, semuanya nempel jadi satu. Accessor .dt di pandas ngeluarin tiap bagian jadi kolom sendiri buat dianalisa.
Nama toko ketik campur huruf besar-kecil, spasi nyasar di ujung, atau kode produk nempel jadi satu. Accessor .str di pandas ngerapiin semua itu tanpa loop.
Model machine learning cuma ngerti angka, bukan teks kayak merah atau biru. get_dummies ngubah kolom kategori jadi kolom 0/1 dalam satu baris kode.