Belajar Scrapling - Security & Etika Web Scraping
Episode 14 of 23

Belajar Scrapling - Security & Etika Web Scraping

Pembahasan sisi yang sering terlupakan: legalitas dan etika scraping. Membaca robots.txt, mematuhi Terms of Service, menerapkan rate limiting yang sopan, sanitasi output dan perlindungan PII, serta mengamankan kredensial scraper seperti API key dan proxy di environment variable.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Dua episode terakhir terasa seperti perlombaan senjata: di episode 12 kalian merotasi proxy agar tidak diblokir, lalu di episode 13 menyamarkan TLS fingerprint agar request tampak seperti browser asli. Keterampilan itu penting — tapi harus diimbangi satu hal: tanggung jawab.

Episode ini membahas sisi yang tidak bisa diajarkan lewat kode: legalitas dan etika. Kalian akan belajar membaca robots.txt, memahami posisi Terms of Service, menata rate limit yang sopan, menjaga data yang kalian ekstrak — termasuk isu PII — dan mengamankan kredensial scraper supaya tidak bocor. Bukan sekadar supaya aman dari tuntutan, tapi supaya kalian jadi scraper yang dibutuhkan orang, bukan yang dimusuhi.

Sebelum menulis satu baris kode, bedakan dua konsep ini:

  • Legal adalah apa yang dibolehkan hukum. Ini tergantung yurisdiksi. Di Indonesia, pengumpulan data pribadi diatur Undang-Undang Perlindungan Data Pribadi (UU PDP) yang mensyaratkan dasar hukum yang sah untuk memproses data pribadi. Data publik pun tidak otomatis bebas dipakai.
  • Etika adalah apa yang seharusnya dilakukan. Sebuah situs boleh saja tidak melarang scraping secara hukum, tapi tetap tidak etis jika kalian menghantamnya ribuan request per detik sampai server jebol.

Aturan praktis sederhana: scraping untuk data yang memang publik dan dibutuhkan, dengan kecepatan manusiawi, tanpa membebani server, dan tanpa menyentuh data pribadi — hampir selalu aman secara legal dan etis. Scraping data pribadi massal, konten berbayar, atau platform yang jelas-jelas melarangnya di ToS adalah zona merah.

Robots.txt: Etiket yang Bisa Dibaca Mesin

robots.txt adalah file di root situs yang memberi tahu crawler halaman mana yang boleh dan tidak boleh diakses. Ini bukan hukum — beberapa situs menulisnya longgar — tapi mematuhinya adalah kebiasaan baik yang dihormati mesin pencari dan scraper profesional:

cek-robots.txt
curl -s https://example.com/robots.txt

Scrapling menghormati ini di spider lewat atribut robots_txt_obey:

Pythonspider-sopan.py
from scrapling.spiders import Spider
 
class BeritaSpider(Spider):
    name = "berita"
    start_urls = ["https://example.com/berita"]
    robots_txt_obey = True

Saat aktif, spider membaca aturan Disallow, menghormati Crawl-delay, dan memproses Request-rate dengan cache per domain. Pahami juga arti Disallow — ia bisa berarti "jangan diindex" alih-alih "jangan diakses". Kalau ragu, tanyakan langsung ke pemilik situs.

Warning

robots.txt tidak menyelamatkan kalian secara hukum dan bukan lisensi scraping. ToS situs dan hukum lokal tetap berlaku. Anggap robots.txt sebagai petunjuk awal, bukan pengaman terakhir.

Rate Limiting yang Sopan

Kecepatan crawl adalah wajah etika kalian. Meluncurkan 100 request per detik ke situs kecil adalah cara paling cepat membakar reputasi IP kalian sendiri — dan menghancurkan server orang. Praktik baik: batasi concurrency per domain dan sisipkan jeda antar request:

Pythonrate-limit-sopan.py
from scrapling.spiders import Spider
 
class BeritaSpider(Spider):
    name = "berita"
    start_urls = ["https://example.com/berita"]
    robots_txt_obey = True
    download_delay = 2.0
    concurrent_requests_per_domain = 1
    max_blocked_retries = 3

download_delay menambah jeda sebelum tiap request, dan concurrent_requests_per_domain membatasi request paralel ke satu domain. Ukur batas wajar dengan coba-coba: mulai pelan, naikkan bertahap, dan perhatikan apakah server merespons 429. Kalau server memberi sinyal, turunkan lagi — itu bentuk negosiasi yang sehat.

Keamanan Data yang Diekstrak

Data yang kalian kumpulkan adalah tanggung jawab yang tersimpan. Mulai dari sanitasi: teks dari halaman web sering membawa tag HTML, whitespace ganda, atau karakter aneh. Bersihkan sebelum disimpan:

Pythonsanitasi.py
import re
 
def bersihkan(raw: str) -> str:
    tanpa_tag = re.sub(r"<[^>]+>", "", raw)
    return " ".join(tanpa_tag.split())

Di luar kebersihan, ada lapisan etika yang lebih berat: PII (Personally Identifiable Information). Nomor telepon, email, alamat, atau identitas orang adalah data sensitif. Jangan mengumpulkannya tanpa dasar hukum yang jelas, dan jangan pernah menyimpannya tanpa perlu. Kalau halaman target memang mengandung PII, terapkan masking atau abaikan field itu sama sekali:

Pythonhindari-pii.py
EMAIL_PATTERN = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
 
def buang_pii(teks: str) -> str:
    return re.sub(EMAIL_PATTERN, "[redacted]", teks)

Aturan emasnya: kumpulkan data seminimal mungkin untuk kebutuhan yang jelas. Data yang tidak pernah kalian simpan adalah data yang tidak akan pernah bocor.

Proteksi Kredensial Scraper

Scraper kalian sekarang membawa barang berharga: kredensial proxy, API key, dan mungkin cookie session. Meng-hardcode semuanya di kode adalah cara tercepat menambah kredibilitas kalian sebagai korban kebocoran sekaligus pelaku kebocoran. Simpan rahasia di environment variable dan baca saat runtime:

Pythonbaca-env.py
import os
 
from scrapling import Fetcher
 
PROXY_URL = os.environ["SCRAPLING_PROXY"]
 
page = Fetcher.get("https://example.com", proxy=PROXY_URL)

Siapkan juga template env di repo tanpa nilai asli, sehingga anggota tim tahu variabel apa yang dibutuhkan:

.env.example
SCRAPLING_PROXY=http://user:pass@proxy.example:8080
SCRAPLING_API_KEY=ganti-dengan-nilai-asli

Beberapa kebiasaan lain yang layak dipelihara: jangan commit file .env, rotasi kredensial secara berkala, dan jangan menaruh kredensial di log. Server yang menerima request kalian juga tidak perlu tahu password proxy kalian — kredensial bocor di log juga bocor ke siapa pun yang baca log itu.

Penutup

Episode ini tidak memberi kalian kode baru yang hebat, tapi memberikan kompas. Kalian tahu cara membaca robots.txt dan mematuhinya lewat robots_txt_obey, menata rate limit yang sopan dengan download_delay dan batas concurrency, membersihkan serta melindungi data yang diekstrak — termasuk menjauhi PII — dan mengamankan kredensial lewat environment variable. Keterampilan teknis di episode 12 dan 13 menjadi berbahaya tanpa sisi etika ini.

Inti yang harus dibawa pulang:

  • Legal dan etika berbeda: hukum mengikuti yurisdiksi, etika mengikuti dampak terhadap server dan pemilik data.
  • robots.txt adalah etiket yang bisa dibaca mesin; hormati lewat robots_txt_obey=True.
  • Rate limit yang sopan dimulai dari download_delay dan batas concurrency per domain, lalu dinaikkan bertahap.
  • Sanitasi output dan hindari menyimpan PII tanpa dasar hukum; masking adalah pilihan terakhir yang lebih baik.
  • Simpan kredensial di environment variable, jangan di kode, log, atau repo.

Di episode 15 kita masuk ke wilayah yang paling ditunggu banyak orang: CAPTCHA dan anti-bot bypass. Kalian akan membedah mekanisme Cloudflare, Turnstile, dan JS challenge, memakai StealthyFetcher untuk menembus proteksi, dan menentukan kapan — dan apakah — melewati proteksi itu adalah keputusan yang etis.

Belajar Scrapling - Security & Etika Web Scraping | Belajar Scrapling