Membuat Web Scraper Sederhana dengan curl
dan sed
Hai, semua! Pernah nggak sih kalian kepikiran untuk membuat web scraper sendiri? Bagi yang belum tahu, web scraper adalah program yang bisa ngambil data dari sebuah website. Nah, kali ini kita bakal coba bikin web scraper sederhana menggunakan curl
dan sed
.
Kenapa pake curl
dan sed
? Karena keduanya adalah command line tools yang keren banget! curl
bisa buat request ke website, sedangkan sed
buat ngedit teks. Jadi, kita bisa request sebuah halaman web kemudian ambil datanya pakai regex.
Apa yang Dibutuhkan?
- Terminal: Pastikan kalian punya terminal atau command prompt.
- Curl: Biasanya sudah terinstal di Linux/Mac. Kalo pake Windows, bisa install via Cygwin atau WSL.
- Sed: Juga biasanya sudah terinstal di Linux/Mac. Kalo di Windows, sama bisa pake Cygwin atau WSL.
Langkah 1: Mengambil Halaman Web dengan curl
Pertama-tama, kita ambil dulu halaman webnya pake curl
. Misalnya, kita mau ambil halaman beranda Google (meskipun sebenarnya Google nggak terlalu menarik buat discrape):
curl https://google.com
Eh, tapi kalo pake itu datanya keluar di terminal, kan? Supaya bisa diolah, kita simpan dulu ke file:
curl https://google.com -o google.html
Nah, sekarang halaman Google udah disimpen di google.html
.
Langkah 2: Mencari Data dengan sed
Katakanlah kita mau ambil judul halaman (<title>
). Kita bisa pakai sed
buat cari teks yang ada di antara <title>
dan </title>
.
sed -n 's/.*<title>\(.*\)<\/title>.*/\1/p' google.html
Penjelasan regex:
-n
:sed
nggak langsung ngeprint output kecuali diperintah.s/../../
: Struktur substitusi dised
..*<title>\(.*\)<\/title>.*
: Cari teks yang ada di antara<title>
dan</title>
.\1
: Ambil teks yang di-capture di dalam kurung (yaitu\(.*\)
).p
: Print hasilnya.
Tapi, pasti di sini ada yang nanya: “Lah, kok judulnya nggak keluar?” Ya karena halaman Google cukup dinamis, <title>
-nya mungkin nggak ada di file html yang didownload. Biar lebih menarik, kita coba halaman lain, misalnya Wikipedia Indonesia:
curl https://id.wikipedia.org/wiki/Halaman_Utama -o wiki.html
sed -n 's/.*<title>\(.*\)<\/title>.*/\1/p' wiki.html
Nah, ini pasti keluar judulnya: Halaman Utama - Wikipedia bahasa Indonesia, ensiklopedia bebas
.
Langkah 3: Memperbaiki Regex
Tapi, problemnya kalau halamannya besar dan kompleks, kadang sed
nggak baca seluruh file karena ada newline. O ya, ada juga kasus khusus di HTML seperti <title >
(ada spasi) atau <title data-foo="bar">
.
Maka, kita perlu regex yang lebih kuat. Contoh:
sed -n 's/.*<title[^>]*>\([^<]*\)<\/title>.*/\1/p' wiki.html
Penjelasan:
<title[^>]*>
: Cocokin<title
diikuti apa aja selain>
sampe nemu>
.\([^<]*\)
: Ambil teks sampe nemu<
.
Langkah 4: Ambil Semua Link
Biar tambah seru, coba ambil semua link di halaman. Biasanya link ada di tag <a>
dengan atribut href
. Coba ini:
sed -n 's/.*href="\([^"]*\)".*/\1/p' wiki.html
Tapi, ini juga bakal nyedot semua atribut href
, bukan cuma di tag <a>
. Jadi, harus lebih spesifik:
sed -n 's/.*<a [^>]*href="\([^"]*\)"[ >].*/\1/p' wiki.html
Gimana, cukup mudah kan bikin web scraper sederhana pake curl
dan sed
? Tentu aja ini cuma buat keperluan sederhana. Kalo butuh yang lebih keren, bisa pakai Python atau tools lain. Tapi, curl
dan sed
tuh kayak pisau lipat di dunia command line: nggak terlalu fancy tapi selalu kepake!
Jadi, selamat mencoba dan happy scraping! Jangan lupa patuhi robots.txt
dan jangan terlalu sering ngescrape biar nggak dibanned! 😉👍