Mengambil Data dengan BeautifulSoup
Melalui kelas ini, kamu diajak untuk:
- Mengidentifikasi langkah-langkah mengambil data dengan BeautifulSoup
Memasukkan URL Halaman Web
Pertama-tama kita perlu mengakses url halaman web yang ingin kita ambil datanya. Untuk melakukan ini, kita menggunakan library requests. Lihat susunan kode di bawah ini.
page = requests.get("https://kompas.com/")
Selanjutnya, kita akan menggunakan BeautifulSoup untuk melakukan parsing dari halaman web tersebut.
soup = BeautifulSoup(page.text, 'html.parser')
Menemukan Elemen HTML dan Mengambil Data
Tugas kita sekarang adalah mencari tag elemen HTML yang ingin kita ambil datanya. Misal kita ingin mengambil data artikel-artikel yang paling sering dibaca beserta jumlah pembacanya di kompas. Ikuti langkah-langkah ini:
- Gunakan BeautifulSoup untuk mencari seluruh elemen “div” dalam struktur HTML.
- Deklarasikan list kosong untuk menyimpan data ketika data sudah diambil.
- Gunakan Inspect Element untuk mencari tag, selector, dan atribut yang perlu kita identifikasi.
- Ubah datanya ke dalam bentuk teks.
- Ubah data ke integer untuk jumlah pembaca artikel.
- Masukkan kedua data ke list kosong yang sudah dideklarasikan di awal.
Lihat susunan kode di bawah ini.
# menemukan seluruh tag div dalam struktur HTML web
mydivs = soup.find_all('div')
# deklarasikan list kosong untuk menyimpan data nantinya
title = []
read_count = []
trends = []
# temukan tag-tag relevan
for div in mydivs:
data1 = div.find("h4", {"class": "most__title"})
data2 = div.find("div", {"class": "most__read"})
if data1 and data2 != None:
# mengambil data-data yang berbentuk teks
judul = data1.text
jumlah_teks = data2.text
# menjadikan data jumlah pembaca yang tadinya str menjadi integer
jumlah = int((jumlah_teks[7:-5]).replace(".", ""))
# memasukkan data ke list kosong
title.append(judul)
read_count.append(jumlah)
Menyimpan Data
Langkah terakhir adalah menyimpan data. Kita bisa menggunakan library pandas untuk membuat data mudah dibaca dan disimpan dalam bentuk file .csv. Lihat susunan kode di bawah ini.
# memasukkan data ke DataFrame Pandas
trends = pd.DataFrame({"title": title, "read_count": read_count})
# mengatur tanggal-bulan-tahun saat ini
today = datetime.datetime.today().strftime('%m-%d-%y')
file_name = "kompas trending {}.csv".format(today)
# menyimpan file CSV
trends.to_csv(file_name, index=False)
Pro Tips
- Elemen HTML dalam web biasanya berpola dengan nama class yang sama.
- Alur logika: cari divnya dahulu, kemudian masukkan sebagai function text.
- Gunakan method integer untuk merapikan teks yang kita ambil.
Kuis
Kita ingin mengambil h3 di dalam class 'artikel_trending'. Bagaimana susunan kodenya?