Python: Web Scraping dengan BeautifulSoup (Pengantar)


2021-01-23T12:04:15Z
Python: Web Scraping dengan BeautifulSoup
Gambar: digitalocean.com

Scraping halaman web dengan python beautifulsoup. Scraping halaman web atau dalam Bahasa Inggrisnya web scraping,  adalah teknik yang digunakan untuk mengambil isi dari sebuah halaman web secara spesifik, misalnya link, teks, gambar, tabel dan lain-lain.

Sebelum mengenal python, saya terbiasa melakukan web scraping dengan menggunakan perintah wget, grep dan sed pada Linux, dengan mengandalkan teknik replace pada sed dan sedikit bumbu regexp (regular expression).

Baca: Sed dan AWK, dua perintah favorit! simple but powerfull
Namun teknik di atas tersebut, tidak pernah saya gunakan kembali setelah mengenal python!

Dengan bantuan library beautifulsoup, pekerjaan mengambil data dari sebuah halaman web menjadi sangat mudah. Pada artikel kali ini saya akan mempraktikkan secara sederhana mengenai cara kerja dari beautifulsoup.

Perlu dicatat, saya menggunakan sistem operasi Linux tepatnya distro Ubuntu 18.04.

Namun tidak perlu khawatir jika anda menggunakan sistem operasi lain, misalnya Windows, karena python merupakan bahasa pemrograman yang bisa berjalan dan mendukung berbagai platform sistem operasi. Selengkapnya mengenai python bisa dibaca disini.

Instalasi BeautifulSoup

Seperti yang telah saya jelaskan pada artikel sebelumnya, bagi sebagian distro Linux umumnya python sudah terinstall secara default. Silahkan cek dengan menggunakan perintah:
$ python -V
Python 2.7.15rc1

Bagi pengguna Windows, cara instalasinya dapat mengacu pada artikel: Python - Otomatisasi Web Browser dengan Selenium pada Windows 7.

Jika python sudah terinstall, saatnya kita melakukan instalasi beautifulsoup. Kita akan melakukannya menggunakan perintah pip.
pip install beautifulsoup4

Cara di atas yaitu kita menginstall BeautifulSoup 4 atau disingkat bs4.
Catatan: jika pip belum terinstall, silahkan jalankan perintah:
sudo apt-get install python-pip

Instalasi Parser

BeautifulSoup mendukung beberapa parser, selain parser HTML standar python itu sendiri yaitu: html.parser. Parser tesebut antara lain: lxml, xml, html5lib

Untuk menginstallnya sama saja, menggunakan perintah:
pip install nama-parser

Seperti yang dikutip dari laman resminya, sangat disarankan untuk menggunakan parser: lxml karena parser ini sangat cepat dibanding yang lainnya.

Tutorial BeautifulSoup: Scraping Tabel pada Halaman Wikipedia

Sebagai permulaan, kita akan mencoba melakukan web scraping sederhana, yaitu mengambil data dari salah satu tabel pada laman wikipedia berikut: Comparison of programming languages.

BeautifulSoup: Scraping Comparison of programming languages

Jika kita buka link wikipedia tersebut, disana terdapat banyak tabel, dan tugas kita kali ini hanyalah mengambil data dari salah satu tabel yang tersedia pada laman tersebut menggunakan beautifulsoup.

#1 Menentukan Tabel

Tabel biasanya mempunyai identifier baik berupa ID maupun class. Untuk melihatnya silahkan buka alamat: https://en.wikipedia.org/wiki/Comparison_of_programming_languages menggunakan browser, arahkan cursor pada tabel yang dimaksud dan buka tools inspect element seperti gambar di bawah ini.

Inspect Element Table wiki Comparison of programming languages

Sekarang lihat pada bagian yang diberi tanda merah, yaitu parameter table id dan table class. Kita hanya perlu salah satu dari itu. Sebagai contoh, dalam artikel ini saya akan menentukan tabel berdasarkan table id.

#2 Membuat Script Python-BeautifulSoup

Setelah menentukan tabel, sekarang kita akan membuat script python sederhana, silahkan salin script di bawah ini dan simpan dengan nama file: wikiTable.py.
#-*- coding: utf-8 -*-
#---------------------------------------
#!/usr/bin/python
#---------------------------------------
# Scrape wikipedia Table
#---------------------------------------

import urllib2
from bs4 import BeautifulSoup

def wikiTable():
        # Spesifikasikan alamat url:
        alamatURL = "https://en.wikipedia.org/wiki/Comparison_of_programming_languages"

        # Mengakses alamatURL
        page = urllib2.urlopen(alamatURL)
        
        # Memparse alamat diatas menggunakan parser: "lxml"
        soup  = BeautifulSoup(page, 'lxml')

        # Menemukan tabel yang menjadi target
        table = soup.find('table', id="Expressiveness")
        
        # Melakukan print table dalam bentuk tag HTML
        print table


wikiTable()
Eksekusi script tersebut:
python wikiTable1.py
Output-nya adalah sebagai berikut:
$ python wikiTable.py 
<table class="wikitable sortable" id="Expressiveness" style="float:right;">
<tr>
<th>Language</th>
<th>Statements ratio<sup class="reference" id="cite_ref-41"><a href="#cite_note-41">[36]</a></sup></th>
<th>Lines ratio<sup class="reference" id="cite_ref-42"><a href="#cite_note-42">[37]</a></sup></th>
</tr>
<tr>
<td>C</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>C++</td>
<td>2.5</td>
<td>1</td>
</tr>
<tr>
<td>Fortran</td>
<td>2</td>
<td>0.8</td>
</tr>
<tr>
<td>Java</td>
<td>2.5</td>
<td>1.5</td>
</tr>
<tr>
<td>Perl</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>Smalltalk</td>
<td>6</td>
<td>6.25</td>
</tr>
<tr>
<td>Python</td>
<td>6</td>
<td>6.5</td>
</tr>
</table>

Bisa dilihat, output di atas masih dalam bentuk tag HTML. Bagaimana jika kita hanya ingin mengambil teksnya saja?
Baik, sekarang fokus pada baris kode print table, coba kita ganti menjadi print table.text sehingga baris akhir kode diatas menjadi:
# Melakukan print table dalam bentuk tag HTML
 print table.text

Jika kita eksekusi kembali script tersebut, maka output-nya adalah sebagai berikut:
$ python wikiTable.py 

Language
Statements ratio[36]
Lines ratio[37]

C
1
1

C++
2.5
1

Fortran
2
0.8

Java
2.5
1.5

Perl
6
6

Smalltalk
6
6.25

Python
6
6.5

Baik, saya rasa sebagai pengantar, contoh di atas sudah cukup menggambarkan bagaimana cara kerja dari beautifulsoup. Selanjutnya:

Python: Web scraping dengan BeautifulSoup: print output tabel layaknya tabel
Happy coding!

No comments:

Post a Comment

Silahkan gunakan nama asli dalam berkomentar. Profil unknown / anonim tidak akan di-approve! Terima kasih.