tutorial web scraping python beautifulsoup
Data Collection, Python

Web Scraping Part 1 : Tutorial Web Scraping dengan BeautifulSoup di Python

Pengembangan Artificial Intelligence (AI) berkembang pesat saat ini. AI membuat mesin bisa berfikikir dan bertindak seperti manusia. Dalam AI dikenal istilah Machine Learning (ML) yang merupakan subset dari AI

Konsep ML belajar dari data melalui proses learning dalam data analytics. Sistem belajar layaknya anak kecil yang tidak mengerti apapun dan diajarkan oleh orang tuanya. Dalam ML bahan ajar yang diajarkan ke sistem adalah data

Contents

Ilmu Data

Saat ini semua orang membicarakan tentang AI dan ML. Di beberapa kampus juga bahkan membuka prodi atau peminatan yang berhubungan AI, ML dan Data. Salah satunya adalah tempat saya mengajar yaitu Telkom University membuka prodi ilmu data (data science) serta membuka laboratorium dan pemintan tentang data dan AI

Dalam melakukan data analytics dibutuhkan sumber data terlebih dahulu. Saat ini sumber data sangat melimpah dan banyak ditemukan dimana saja baik berbentuk text maupun format lainnya. Salah satu sumber data yang melimpah adalah dari internet dan media sosial

Kadang kali data ini dapat dengan mudah kita ambil. Ada yang sudah menyediakan API untuk pengambilannya tetapi banyak lainnya yang harus kita usahakan sendiri. Salah satu cara untuk mendapatkan data teks di internet adalah dengan teknik web scraping

Web Scraping adalah cara untuk mengambil data dari halaman web ke dalam bentuk yang diinginkan seperti format csv atau json

Tentu saja ada etika dalam melakukan scraping data di internet. Terkadang beberapa website menyediakan Term of Service (TOS) agar konten websitenya dilarang untuk diambil

HTML, CSS dan Javascript

Sebelum melakukan web scraping dibutuhkan pemahaman bahasa HTML karena sebagaian besar website membutuhkan HTML sebagai bahasa markup-nya

Pengembangan website umumnya terdiri dari 3 elemen berikut:

  • HTML
  • CSS
  • Javascript

HTML adalah komponen utama dalam membangun web dan dibagun dari tag-tag untuk menyusun heading, paragraf, table dan sebagainya

CSS adalah bahasa untuk membuat web terlihat lebih indah seperti warna, ukuran, posisi dan sebagainya

Javascript adalah bahasa digunakan untuk melengkapi web agar terlihat lebih interaktif

Sebelum melanjutkan materi web scraping silahkan pahami dulu HTML dasar di artikel Tutorial HTML dasar untuk pemula

Web Scraping

Oke kita lanjut ke implementasi web scraping

Untuk mengambil data di halaman website kita dapat memanfaatkan class / id atribut di HTML. untuk class dan id atribut sudah dijelaskan dimateri Tutorial HTML dasar untuk pemula.

Case web scraping adalah mengambil data quotes dari halaman webiste http://quotes.toscrape.com

website ini memang dikhususkan untuk belajar melakukan scraping jadi kita tidak perlu takut melakukan pelanggaran saat ambil konten websitenya

Tutorial Web Scraping dengan BeautifulSoup di Python

Di halaman http://quotes.toscrape.com terdapat 2 section yaitu bagian kiri yang terdiri dari title, quotes, author dan tags -nya

Sedangkan di bagian kanan terdiri dari tags yang paling populer

Tutorial Web Scraping dengan BeautifulSoup di Python

Website http://quotes.toscrape.com terdiri dari 3 komponen yaitu HTML, CSS dan Javascript

Inspect Element Website

Untuk mengetahui kode dari website http://quotes.toscrape.com kita bisa lakukan dengan teknik inspect element melalui browser

Caranya klik kanan di halaman website yang ingin diinspect kemudian pilih Inspect Element dan akan muncul halaman kode HTML dari halaman website tersebut. Posisi halaman inspect bisa diatur disebelah kiri halaman website atau dibawah

Tutorial Web Scraping dengan BeautifulSoup di Python

Kita juga bisa melakukan highlight terhadap komponen website tertentu dan melihat kode spesifiknya dengan menggunakan tombol panah di pojok halaman inspector dan pilih halaman website yang ingin dilihat kodenya

Tutorial Web Scraping dengan BeautifulSoup di Python

Misal ingin melihat kode HTML dari halaman quote paling atas

Tutorial Web Scraping dengan BeautifulSoup di Python

Selanjutnya kita lihat lebih kode HTML lebih detail dari quote pertama

Tutorial Web Scraping dengan BeautifulSoup di Python

Quote pertama dari Albert Einstein dengan quote β€œThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” diapit oleh tag <span> dengan class atribut “text

Tutorial Web Scraping dengan BeautifulSoup di Python

Element author (Albert Einstein) diapit oleh tag <span> dan <small> dengan class author

Tutorial Web Scraping dengan BeautifulSoup di Python

Sedangkan tags quote diapit oleh tag <div> dengan class tags yang didalamnya menggunakan tag <meta> dengan class keywords

BeautifulSoup

BeautifulSoup merupakan library python digunakan untuk melakukan web scraping dalam package bs4.

untuk install bs4 gunakan pip atau conda

 pip install bs4

Note: Silahkan buka materi cara install library di Python

Setelah sukses terinstall cara memanggil library BeautifulSoup adalah sebagai berikut

from bs4 import BeautifulSoup

Contoh penggunaan BeautifulSoup

Misal kita mempunyai kode HTML yang disimpan dalam sebuah string di dalam file python

dokumen = '''
<html>
<head>
    <title>Tutorial BeautifulSoup</title>
</head>

<body>
    <p class="judul">Judul Dokumen</p>

    <p class="paragraf">Ini adalah contoh paragraf</p>

    <a href="https://ngodingdata.com" class="url">Ngodingdata</a>
</body>

</html>
'''

Kemudian gunakan library BeautifulSoup untuk mengekstrak kode HTML

from bs4 import BeautifulSoup
html_soup = BeautifulSoup(dokumen, 'html.parser')

print(html_soup)

Hasilnya adalah

Fungsi find()

Untuk mengambil potongan kode HTML atau konten dari HTML gunakan fungsi find()

Fungsi find() akan mengambil data berdasarkan tag HTML. Jika terdapat tag HTML yang sama lebih dari satu maka yang diambil adalah tag yang paling atas di halaman HTML

judul = html_soup.find('p')
print(judul)

Hasilnya

Jika ingin mengambil nilai dari tag <p> dengan nama class tertentu maka tambahkan parameter class_ di dalam fungi find()

Misal kita tambahkan parameter class_ judul dan paragraf untuk mengambil nilai dari tag <p> dengan kedua class tersebut

judul = html_soup.find('p', class_='judul')
paragraf = html_soup.find('p', class_='paragraf')
print(judul)
print(paragraf)

untuk mengambil hanya konten dari HTML (tanpa kode HTMLnya) tambahkan sintaks text diakhir statement

judul_saja = html_soup.find('p', class_='judul').text
print(judul_saja)

Fungsi find_all()

Fungsi find() hanya dapat mengekstrak satu ouput sedangkan biasanya banyak tag HTML yang sama yang ingin diambil semuanya.

Untuk mengambil konten HTML dengan tag yang sama gunakan fungsi find_all()

Fungsi find_all() dapat mengambil sem

all_paragraf = html_soup.find_all('p')
print(all_paragraf)

Biasanya fungsi find_all() digunakan untuk mengambil data yang berbentuk table atau list

Sebenarnya masih banyak fungsi lain dari library BeautifulSoup tetapi fungsi find() dan find_all() paling banyak digunakan untuk ekstrak data dari website.

Berikut kode lengkap dari case BeautifulSoup diatas

from bs4 import BeautifulSoup

dokumen = '''
<html>
<head>
    <title>Tutorial BeautifulSoup</title>
</head>

<body>
    <p class="judul">Judul Dokumen</p>

    <p class="paragraf">Ini adalah contoh paragraf</p>

    <a href="https://ngodingdata.com" class="url">Ngodingdata</a>
</body>

</html>
'''

html_soup = BeautifulSoup(dokumen, 'html.parser')

judul = html_soup.find('p', class_='judul')
paragraf = html_soup.find('p', class_='paragraf')
judul_saja = html_soup.find('p', class_='judul').text
print(judul)
print(paragraf)
print(judul_saja)

all_paragraf = html_soup.find_all('p')
print(all_paragraf)

Tutorial selanjutnya adalah mengimplementasikan BeautifulSoup di website http://quotes.toscrape.com/ yang telah kita bahas struktur webnya diatas

2 Comments

  1. Wah dari telkom university juga, salam kenal mas. Apakah beautifulsoup berjalan secara concurrent atau ngga mas? Kelebihan kita scraping menggunakan python apa ya mas?

    1. salam kenal mas.. dari telyu juga mas?
      beautiful soup tidak berjalan secara concurrent alternatifnya bisa menggunakan scrapy. cuma bs lebih mudah dipelajari dan digunakan

      mungkin kelebihannya karena python mudah dipelajari, komunitasnya besar dan library buat scraping powerful πŸ˜€

Leave a Reply

Your email address will not be published. Required fields are marked *