Mengenal BeautifulSoup Untuk WebScraping

image description

Pengantar

Data. Tak bisa dipungkiri lagi, data adalah the new oil untuk industri dalam menjalankan operasionalnya. Namun, kita lebih sering berhadapan dengan masalah sulitnya mendapatkan data. Kalau teman-teman cek di opendata atau di kaggle dataset, mudah saja bagi kita mendapatkan data yang sudah tertata rapi dalam bentuk .csv. Sayangnya, masih banyak data lain yang membuat seorang pengolah data berfikir dua kali. Misalnya, datanya yang kita perlukan hanya tersedia dalam bentuk pdf, atau data tersebut terpampang di browser atau di website. Kali ini saya membahas bagaimana cara mendapatkan data yang ada di website.

Sebelumnya, kita kenalan dulu dengan beautiful soup. Dalam situs dokumentasinya,

Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers hours or days of work. - BeautifulSoup

Ya, Beautiful Soup adalah library di python untuk menarik data yang ada di HTML. Sebelum saya mengenal Beautiful Soup atau teknik scraping, saya hanya meng-copy-paste data table yang ada di web lalu di pindahkan ke excel. namun proses tersebut tentu sangat tidak efisien. Selain library Beautiful Soup, ada juga scrapy yang fungsinya hampir sama. Hanya berbeda dari segi teknik pemakaian dan kebutuhan.


Daftar Isi

    1.    Setup
    2.    Getting Started
    3.    Use Case


1. Setup

Untuk menginstall beautiful soup kamu bisa menggunakan command berikut dalam command prompt

pip install beautifulsoup4

Jika sudah selesai, ada baiknya juga menginstall parser html

pip install lxml 
pip install htn

2. Getting Started

Untuk memulai penggunaan beautiful soup, bisa dilakukan dengan cara

from bs4 import beautifulsoup
with open('file.html') as f: soup = BeautifulSoup(fp)


3. Use Case

Studi kasus ini dharapkan dapat memberi gambaran yang jelas tentang penggunaan BeautifulSoup. Kali ini saya akan mengambil data inflasi

  • buka halaman inflasi dari Bank Indonesia.


  • Download halaman tersebut dengan menekan tombol ctrl + s, simpan file tersebut dengan nama DataInflasi.
  • Buka jupyter notebook atau text editor, untuk artikel ini saya memakai jupyter notebook.
  • Lalu buat notebook dengan kllik new > python 3
  • Setelah notebook berhasil dibuat lalu import beautifulsoup
from bs4 import BeautifulSoup

  • Setelah itu buka file inflasi yang didownload tadi. pada script di bawah ini with open berarti membuka file, Beautifulsoup(f, 'lxml') berarti memasukan isi file html tersebut kedalam beautifulsoup dengan parse lxml. setelah itu di assign ke variable soup.
with open('C:/Folder/to/your/DataInflasi.html') as f:
    soup = BeautifulSoup(f, 'lxml')

  • Setelah itu kita inspect element pada browser di halaman inflasi tersebut. lalu temukan tag html yang berisi variabel bulan dan inflasi.

Lalu, tambahkan script dibawah ini. untuk memilih area yang ingin di scraping dengan tag table dan class dengan nama table1

table = soup.find('table', attrs={'class':'table1'})

  • lalu tambahkan script di bawah ini agar kita dapat menemukan berapa banyak jumlah baris. Jumlah baris pada table inflasi ini bisa kita temukan dalam tag html <tr>.

tr = table.find_all('tr')

  • Kemudian, kita mencari value di dalam table tersebut. Setelah kita mengetahui berapa banyak baris menggunakan len(tr), kita melakukan perulangan, dengan mencacah tiap tag. Lalu kita dapatkan value bulannya dengan find all pada array ke nol [0]. Untuk mendapat mendapatkan value angka inflasi tersebut, kita gunakan find_all td pada array pertama [1]. Setelah kita berhasil mendapatkannya, kita menggunakan strip() untuk menghapus whitespace.

for i in range(1, len(tr)):
    row = table.find_all('tr')[i]
    
    #get bulan
    bulan = row.find_all('td')[0].text
    bulan = bulan.strip()
    
    #get inflasi
    angka = row.find_all('td')[1].text
    angka = angka.strip()
    
    print(bulan + ' ' + angka)


Wrap The Code

from bs4 import BeautifulSoup

with open('C:/Users/andes/Documents/DataInflasi.html') as f:
    soup = BeautifulSoup(f, 'lxml')

table = soup.find('table', attrs={'class':'table1'})

tr = table.find_all('tr')

for i in range(1, len(tr)):
    row = table.find_all('tr')[i]
    
    #get bulan
    bulan = row.find_all('td')[0].text
    bulan = bulan.strip()
    
    #get inflasi
    angka = row.find_all('td')[1].text
    angka = angka.strip()
    
    print(bulan + ' ' + angka)


hasil final.



Latest articles

OUR TOP 5 CONTRIBUTOR

image description

Fajar Muharandy

-

image description

Fajar Jaman

-

image description

Bernardus Ari Kuncoro

-

image description

Rasyid Ridha

image description

ilyas ahsan

Mobile apps developer and Data Science Researcher