Membangun Sebuah Web Scraping dengan Python dan BeautifulSoup

satya kenandi
Mandiri Engineering
7 min readSep 29, 2020

Halo Mandirian apakah kalian pernah terbayang? bagaimana cara menarik sejumlah data yang besar dari sebuah situs web dan dilakukan dengan waktu yang terbilang singkat. Bagaimana cara kita melakukannya tanpa harus membuka sebuah situs web yang kita inginkan dan mendapatkan datanya? Dan jawabannya adalah Web Scraping menggunakan Python. Pada artikel kali ini kita akan membahas dan mencoba melakukan Web Scraping dengan Python menggunakan library BeautifulSoup. Sebelum memulai lebih mendalam mari kita bahas terlebih dahulu apa itu Web Scraping serta library BeautifulSoup yuk.

Apa Itu Web Scraping?

Okay, pertama-tama mari kita bahas tentang Web Scraping terlebih dahulu. Web Scraping adalah sebuah istilah yang digunakan untuk mendeskripsikan penggunaan program atau algoritma untuk mengekstrak dan memproses data dalam jumlah besar dari situs web. Web Scraping menjadi salah satu solusi dalam membantu mengumpulkan data tidak terstruktur dari sebuah web ataupun jika situs web tersebut tidak menyediakan API (Application Programming Interface) untuk pengambilan informasi dan menyimpannya dalam bentuk terstruktur.

Kenapa Menggunakan Python Dalam Web Scraping?

Setelah kita mengetahui pengertian dari Web Scraping, pasti Mandirian bertanya-tanya dong kenapa menggunakan Python? Oleh karena itu, mari kita bahas apa saja kelebihan menggunakan Python untuk melakukan Web Scraping.

· Ease of Use : Python mudah untuk di implementasi dalam pengkodean. Tidak perlu menambahkan titik koma “;” atau kurung kurawal “{}” di mana saja.

· Large Collection of Libraries : Python memiliki banyak library seperti Numpy, Matplotlib, Pandas, dll yang menyediakan metode dan layanan untuk berbagai tujuan. Sehingga, sangat cocok untuk Web Scraping dan untuk melakukan ekstrasi data.

· Dynamically Typed : dengan Python tidak perlu menentukan tipe data untuk variabel, serta dapat menggunakan variabel di manapun [MYA2] kode tersebut berada. Sehingga, menghemat waktu dan membuat pekerjaan lebih cepat.

· Easily Understandable Syntax : sintaks Python mudah dimengerti karena kode Python sangat mirip dengan membaca pernyataan dalam bahasa Inggris .

· Small Code, Large Task : dengan Python, kita dapat menulis sedikit kode tapi memiliki tugas yang besar. Oleh karena itu, kita dapat menghemat waktu dalam menulis kode.

Penggunaan BeautifulSoup Dalam Web Scraping

Seperti yang kita tahu jika Pyhton mempunyai banyak library untuk berbagai macam tujuan dan salah satunya BeautifulSoup. BeautifulSoup merupakan library Python yang digunakan untuk menarik data dari file HTML dan XML. Serta dokumen HTML atau XML yang ditulis dalam pengkodean ASCII atau UTF-8, saat dokumen tersebut di load BeautifulSoup dapat mengubahnya menjadi Unicode.

Pada artikel ini kita akan berlatih Scraping dengan BeautifulSoup sekaligus melakukan manipulation dan cleaning data menggunakan Jupyter Notebook, Jika kalian belum memiliki Jupyter Notebook, disarankan untuk me-install Anaconda Python yang tersedia di internet.

Pertama, untuk melakukan web Scraping kita harus mengimpor library seperti script dibawah ini. Fungsi urllib.request untuk membuka URL dan package BeautifulSoup digunakan untuk mengekstrak data dari file HTML. Nama library BeautifulSoup adalah bs4 dengan kepanjangan dari BeautifulSoup versi 4.

import pandas as pdfrom urllib.request import urlopenfrom bs4 import BeautifulSoup

Setelah sukses mengimpor modul yang diperlukan langkah selanjutnya kita harus menentukan URL yang berisi set data dan meneruskaannya ke urlopen() untuk mendapatkan halaman HTML yang dituju.

url = "http://www.hubertiming.com/results/2017GPTR10K"html = urlopen(url)

Mengakses halaman html hanyalah langkah pertama, langkah selanjutnya adalah membuat obyek Beautiful Soup dari html. BeautifulSoup package berguna untuk parse html, yaitu mengambil teks html mentah dan memecahnya menjadi obyek Python.

soup = BeautifulSoup(html, ‘lxml’)

type(soup)

Untuk mengekstrak tag html yang berguna di dalam halaman web kita dapat menggunakan find_all(). Contoh tag yang berguna seperti <a> untuk hyperlink, <table> untuk tabel, <tr> untuk baris tabel, <th> untuk header tabel, dan <td> untuk cell tabel. Script dibawah ini memperlihatkan cara mengekstrak semua hyperlink di halaman web hubertiming .

soup.find_all('a')

Goal dari artikel ini adalah untuk mengambil tabel dari halaman web dan mengubahnya menjadi dataframe untuk manipulasi yang lebih mudah menggunakan Python. Untuk mencapai hal tersebut, Kita harus mendapatkan semua baris tabel berbentuk list terlebih dahulu dan kemudian mengubah list tersebut menjadi dataframe. Berikut ini adalah for loop yang melakukan iterasi melalui baris tabel dan mencetak sel baris.

for row in rows:row_td = row.find_all('td')print(row_td)type(row_td)

Setelah itu kita harus membersihkan dari tag HTML dengan mengekstrak teks diantara tag html untuk setiap barisnya, dan menambahkannya ke list yang sudah ditetapkan.

import relist_rows = []for row in rows:cells = row.find_all('td')str_cells = str(cells)clean = re.compile('<.*?>')clean2 = (re.sub(clean, '',str_cells))list_rows.append(clean2)print(clean2)type(clean2)

Langkah selanjutnya adalah mengkonversi list menjadi dataframe dan mendapatkan data 10 teratas menggunakan Pandas.

df = pd.DataFrame(list_rows)df.head(10)

Kemudian yang akan kita lakukan setelah selesai dalam ekstrasi data menjadi dataframe, langkah selanjutnya adalah melakukan manipulation dan cleaning. Pertama kita harus merubah format dataframe tersebut menjadi format yang kita butuhkan dengan melakukan split kolom ‘0’ menjadi beberapa kolom pada posisi koma menggunakan str.split().

df1 = df[0].str.split(',', expand=True)df1.head(10)

Belum cukup sampai disitu, data pada kolom ‘0’ kita harus melakukan metode strip() untuk menghapus value tutup kurung yang tidak dibutuhkan.

df1 = df[0].str.split(',', expand=True)df1.head(10)

Untuk menentukan headers tabel yang hilang, dapat menggunakan find_all() untuk mendapatkan headers tabel tersebut.

col_labels = soup.find_all('th')

Hampir sama dengan baris tabel, yang digunakan adalah BeautifulSoup untuk mengekstrak teks di antara tag HTML sebagai header tabel.

all_header = []col_str = str(col_labels)cleantext2 = BeautifulSoup(col_str, "lxml").get_text()all_header.append(cleantext2)print(all_header)

Kemudian kita dapat mengubah list headers menjadi sebuah pandas dataframe.

df2 = pd.DataFrame(all_header)df2.head()

Setelah mendapatkan list sebagai nama headers, untuk memisahkan kolom ‘0’ menjadi beberapa kolom dengan posisi koma untuk semua baris dapat menggunakan script berikut ini.

df3 = df2[0].str.split(‘,’, expand=True)df3.head()

Untuk menetapkan baris pertama menjadi header tabel bisa dilihat pada script dibawah ini.

df5 = df3.rename(columns=df3.iloc[0])df5.head()

Pada tahapan ini, tabel sudah hampir selesai dalam perubahan format yang dibutuhkan. Akan tetapi jika dalam hal kedepan data ini dibutuhkan untuk analisis. Kita bisa memulai manipulasi data dengan mendapatkan gambaran umum data seperti yang ditunjukkan di bawah ini.

df5 = df3.rename(columns=df3.iloc[0])df5.head()

Terlihat bahwa terdapat 583 baris dan 10 kolom yang dapat kita hapus terkait semua missing values di dalamnya.

df6 = df5.dropna(axis=0, how=’any’)

Dan juga kita harus lihat bahwa untuk value baris pertama masih sama dengan header tabel sekarang. Oleh karena itu kita harus menghapus baris pertama tersebut.

df7 = df6.drop(df6.index[0])df7.head()

Setelah itu untuk beberapa nama header tabel yang masih belum sesuai, kita dapat melakukan rename terhadap nama header tabel yang kita inginkan. Seperti nama header ‘Place’ dan ‘Team’.

df7.rename(columns={‘[Place’: ‘Place’},inplace=True)df7.rename(columns={‘ Team]’: ‘Team’},inplace=True)df7.head()

Tahapan terakhir yang dilakukan yaitu, menghapus value tutup kurung yang masih terdapat di kolom ‘Team’. Butuh beberapa tahapan untuk menjadi dataframe yang kita butuhkan dan sekarang dari hasil tersebut kita dapat menggunakannya ke langkah lain yang lebih menarik seperti melakukan analisis statistik ataupun hal lainnya dalam menggali sebuah informasi.

df7[‘Team’] = df7[‘Team’].str.strip(‘]’)df7.head()

Kesimpulan

Pada artikel ini kita telah belajar mengenai apa itu Web Scraping hingga implementasinya menggunakan Python. Serta menggunakan library BeautifulSoup untuk melakukan parsing HTML data dan pada tahapan terakhir dilakukannya manipulasi ataupun data cleaning untuk mendapatkan sebuah dataframe yang dibutuhkan. Tak lupa setelah membaca artikel ini, Mandirian dapat menggunakan Python dengan mudah untuk melakukan Scraping data dari sebuah web, melakukan teknik data cleaning serta menggunakan data yang telah didapatkan menjadi sebuah informasi yang berguna di kemudian hari.

Referensi :

https://www.edureka.co/blog/web-Scraping-with-python/

https://medium.com/@dede.brahma2/Scraping-web-dengan-python-f686d3716028

https://realpython.com/beautiful-soup-web-scraper-python/

https://www.datacamp.com/community/tutorials/web-Scraping-using-python

https://devtrik.com/python/web-Scraping-dengan-python-dan-beautifulsoup/

--

--