
Pandas Baca HTML
Kita bisa membaca berkas csv, excel, database dan bahkan pdf. Namun jaman now sumber data tak berbatas adalah internet. Dan salah satu bentuk data di internet adalah berkas html. Pandas menyediakan fungsi untuk membaca tabel pada berkas html, kita akan belajar menggunakan fungsi ini.
Kode Lima Detik
import requests import pandas as pd # baca hasil unduhan page1_tables = pd.read_html('Pandas - Sampel.html') # baca langsung dari url header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" } url = 'https://basangdata.com/klasifikasi-teks-dengan-naive-bayes/' r = requests.get(url, headers=header) page2_tables = pd.read_html(r.text)
Latar Belakang
Pandas menyediakan fungsi read_html yang akan merubah tabel pada halaman web menjadi dataframe. Fungsi ini dapat diaplikasikan pada berkas html hasil unduhan atau langsung dari alamat web.
Kode
Kita akan mencoba mengambil data dari dua halaman dari blog ini, yaitu halaman sampel dan klasifikasi teks. Halaman sampel tidak memiliki tabel sehingga fungsi read_html akan menghasilkan ValueError: No tables found, sedang halaman klasifikasi teks memiliki 6 tabel.
Langkah pertama adalah meload library pandas.
import pandas as pd
Halaman Sampel
Unduh manual
Halaman dapat diunduh kemudian hasil unduhan tersebut dibaca menggunakan fungsi read_html.

page1_tables = pd.read_html('Pandas - Sampel.html')

Karena pada halaman sampel tidak terdapat tabel maka pandas akan mengeluarkan pesan kesalahan “No tables found“.
Akses langsung dari url
Seringnya yang kita inginkan adalah mengakses langsung halaman web tujuan, bukan mengunduh manual. Kita dapat mencoba kode di bawah ini.
page2_tables = pd.read_html('https://basangdata.com/pandas-sampel/')

Namun pandas memberikan pesan kesalahan “HTTP Error 403: Forbidden“. Menyiasati ini, kita bisa menggunakan library requests untuk mengunduh halaman yang akan kita gunakan. Hasil unduhan itu yang dibaca oleh read_html.
import requests header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" } url1 = 'https://basangdata.com/pandas-sampel/' r = requests.get(url1, headers=header) page3_tables = pd.read_html(r.text)

Halaman klasifikasi teks
Kita akan langsung mengakses menggunakan requests.
url2 = 'https://basangdata.com/klasifikasi-teks-dengan-naive-bayes/' r = requests.get(url2, headers=header) page4_tables = pd.read_html(r.text)

Halaman klasifikasi teks memiliki enam tabel.
len(page4_tables)

Tabel pertama memiliki dua baris.
page4_tables[0]

Sesuai dengan tabel pada halaman klasifikasi teks.

Untuk tabel kedua sebagai berikut.
page4_tables[1]

Untuk tabel keenam (terakhir) menggunakan kode berikut.
page4_tables[-1]

Referensi
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html
- https://stackoverflow.com/questions/43590153/http-error-403-forbidden-when-reading-html
Cover Image by Boskampi on Pixabay
One Reply to “Pandas Baca HTML”