Cara menggunakan python scrape html file

Pada tutorial sebelumnya, saya memperlihatkan bagaimana cara menggunakan modul Requests untuk mengakses halaman web menggunakan Python. Tutorial tersebut membahas banyak topik seperti membuat request GET/POST dan mengunduh benda seperti gambar atau PDF menggunakan pemrograman. Satu hal yang tidak ada di tutorial tersebut adalah panduan untuk menyimpan halaman web yang kamu akses menggunakan Request untuk mengambil informasi yang kamu butuhkan.

Pada tutorial ini kamu akan belajar tentang Beautiful Soup, library Python untuk mengambil data dari file HTML. Fokus tutorial ini adalah mempelajari dasar-dasar dari library tersebut, dan topik lanjutan akan dibahas pada tutorial berikutnya. Perlu diketahui tutorial ini menggunakan Beautiful Soup 4 untuk semua contoh.

Instalasi

Kamu bisa menginstall Beautiful Soup 4 menggunakan

$ pip install beautifulsoup4
79. Package namenya
$ pip install beautifulsoup4
80. Seharusnya bisa bekerja untuk Python 2 dan Python 3.

1
$ pip install beautifulsoup4

Jika kamu tidak punya pip, kamu bisa mengunduh source tarball Beautiful Soup 4 dan menginstallnya menggunakan

$ pip install beautifulsoup4
81.

1
$ python setup.py install

BeautifulSoup awalnya di-package sebagai kode Python 2. Saat kamu menginstallnya dengan Python 3, akan secara otomatis diupdate menjadi kode Python 3. Kode tidak akan diubah kecuali kamu menginstall package-nya. Berikut ada beberapa kesalahan umum yang mungkin akan kamu temui:

  • $ pip install beautifulsoup4
    
    82 "No module named HTMLParser" terjadi jika kamu menjalankan kode versi Python 2 pada Python 3.
  • $ pip install beautifulsoup4
    
    82 "No module named html.parser" terjadi jika kamu menjalankan kode versi Python 3 pada Python 2.

Kedua error tersebut bisa diperbaiki dengan uninstall dan install ulang Beautiful Soup.

Menginstall Parser

Sebelum membahas perbedaan antar berbagai parser yang berbeda yang bisa kamu gunakan dengan Beautiful Soup, mari buat kode untuk membuat sebuah soup.

1
from bs4 import BeautifulSoup
2
3
soup = BeautifulSoup("<html><p>This is <b>invalid HTML</p></html>", "html.parser")

Objek

$ pip install beautifulsoup4
84 bisa menerima dua argumen. Pertama adalah markup yang ingin diproses, kedua adalah parser yang ingin kamu gunakan. Beberapa contoh parser diantaranya:
$ pip install beautifulsoup4
85, lxml, dan html5lib. Parser
$ pip install beautifulsoup4
86 memiliki dua versi, parser HTML dan parser XML.

$ pip install beautifulsoup4
85 adalah parser bawaan, dan tidak bisa bekerja dengan baik di Python versi lama. Kamu bisa menginstall parser lain dengan perintah berikut:

1
$ pip install beautifulsoup4
0
2
$ pip install beautifulsoup4
2

Parser

$ pip install beautifulsoup4
86 sangat cepat dan bisa digunakan untuk mengolah HTML dengan cepat. Di sisi lain,
$ pip install beautifulsoup4
89 sangat lambat, tapi sangat fleksibel. Berikut adalah contoh penggunaan masing-masing parser:

1
soup = BeautifulSoup("<html><p>This is <b>invalid HTML</p></html>", "html.parser")
2
$ pip install beautifulsoup4
6
3
$ pip install beautifulsoup4
8
$ pip install beautifulsoup4
9
1
0
1
1
1
2
$ pip install beautifulsoup4
6
1
4
1
5
1
6
1
7
1
8
1
9
$ pip install beautifulsoup4
6
$ python setup.py install
1
$ python setup.py install
2
$ python setup.py install
3
$ pip install beautifulsoup4
8
$ python setup.py install
5
$ python setup.py install
6
$ python setup.py install
7
$ python setup.py install
8
$ pip install beautifulsoup4
6
1
0
1
1

Perbedaan yang digambarkan di atas hanya penting jika kamu mengolah HTML yang tidak valid. Tapi, sebagian besar HTML di web tidak memiliki format yang benar, dan mengetahui perbedaan ini akan membantu kamu saat mendebug parsing error dan menentukan parser mana yang ingin kamu gunakan dalam project. Secara umum, parser

$ pip install beautifulsoup4
86 adalah pilihan yang sangat baik.

Objek pada Beautiful Soup

Beautiful Soup mengurai dokumen HTML yang diberikan menjadi pohon berisi objek Python. Ada empat objek Python utama yang kamu perlu ketahui:

$ pip install beautifulsoup4
91,
$ pip install beautifulsoup4
92,
$ pip install beautifulsoup4
84,  dan
$ pip install beautifulsoup4
94.

Objek

$ pip install beautifulsoup4
91 mengacu pada tag XML atau HTML dalam dokumen. Kamu bisa mengakses nama sebuah tag menggunakan
$ pip install beautifulsoup4
96. Kamu juga bisa mengubah nama tag. Perubahan nama akan terlihat pada markup yang dihasilkan oleh Beautiful Soup.

Kamu bisa mengakses berbagai atribut berbeda seperti kelas dan is dari tag menggunakan

$ pip install beautifulsoup4
97 dan
$ pip install beautifulsoup4
98. Kamu juga bisa mengakses keseluruhan kamus atribut menggunakan
$ pip install beautifulsoup4
99. Kamu juga bisa menambah, menghapus, atau mengubah atribut sebuah tag. Atribut seperti
1
00 sebuah elemen yang bisa menyimpan banyak nilai disimpan sebagai list.

Teks dalam sebuah tag disimpan sebagai

$ pip install beautifulsoup4
92 dalam Beautiful Soup. Terdapat beberapa fungsi berguna seperti
1
02 untuk mengganti teks dalam tag. Kamu juga bisa mengubah
$ pip install beautifulsoup4
92 menjadi unicode string menggunakan
1
04.

Beautiful Soup juga membolehkan kamu mengakses komentar dalam halaman web. Komen tersebut disimpan sebagai objek

$ pip install beautifulsoup4
94, yang merupakan sebuah
$ pip install beautifulsoup4
92.

Kamu sudah belajar tentang objek

$ pip install beautifulsoup4
84 di bagian sebelumnya. Objek tersebut digunakan untuk mewakili keseluruhan dokumen. Karena bukan merupakan sebuah objek sebenarnya, objek ini tidak memiliki nama atau atribut.

Mengambil Judul, Heading, dan Tautan

Kamu bisa mengekstrak judul halaman dan data lain dengan mudah menggunakan Beautiful Soup. Mari scrape halaman Wikipedia tentang Python. Pertama, kamu perlu mengambil markup dari halaman menggunakan kode dari tutorial modul Requests untuk mengakses halaman web.

1
1
3
2
from bs4 import BeautifulSoup
3
$ pip install beautifulsoup4
9
1
8
1
0
from bs4 import BeautifulSoup
0

Setelah membuat soup, sekarang kamu bisa mendapat judul halaman web dengan kode berikut:

1
from bs4 import BeautifulSoup
2
2
from bs4 import BeautifulSoup
4
3
$ pip install beautifulsoup4
9
from bs4 import BeautifulSoup
7
1
0
from bs4 import BeautifulSoup
9
1
2
1
4
2
2
1
6
2
4

Kamu juga bisa mengorek halaman web untuk informasi lain seperti judul bab atau paragraf pertama, kelas mereka, atau atribut

1
08-nya.

1
2
6
2
2
8
3
$ pip install beautifulsoup4
9
3
1
1
0
3
3
1
2
1
4
3
6
1
6
3
8
1
7
1
9
soup = BeautifulSoup("<html><p>This is <b>invalid HTML</p></html>", "html.parser")
1
$ python setup.py install
1
soup = BeautifulSoup("<html><p>This is <b>invalid HTML</p></html>", "html.parser")
3
$ python setup.py install
3
$ python setup.py install
5
soup = BeautifulSoup("<html><p>This is <b>invalid HTML</p></html>", "html.parser")
6
$ python setup.py install
6
soup = BeautifulSoup("<html><p>This is <b>invalid HTML</p></html>", "html.parser")
8
$ python setup.py install
8
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
6
$ pip install beautifulsoup4
01
$ pip install beautifulsoup4
02

Begitu pula kamu bisa mengiterasi semua link atau subjudul dalam dokumen menggunakan kode berikut:

1
$ pip install beautifulsoup4
04
2
$ pip install beautifulsoup4
06
3
$ pip install beautifulsoup4
08
$ pip install beautifulsoup4
9
$ pip install beautifulsoup4
10

Kamu bisa menjelajah di dalam DOM tree menggunakan nama tag biasa. Merantaikan nama tag bisa membantu kamu menjelajah lebih dalam. Contohnya, kamu bisa mendapatkan link pertama di paragraf pertama di halaman Wikipedia tersebut menggunakan

1
09. Semua link di paragraf pertama bisa diakses menggunakan
1
10.

Kamu juga bisa mengakses semua anak dari sebuah tag sebagai list dengan menggunakan

1
11. Untuk mendapatkan anak dengan indeks tertentu, kamu bisa gunakan
1
12. Kamu juga bisa mengiterasi anak-anak dari tag menggunakan atribut
1
13.

1
13 dan
1
15 berguna ketika kamu ingin mengakses langsung atau keturunan pertama dari sebuah tag. Untuk mendapatkan semua keturunan, kamu bisa menggunakan atribut
1
16.

1
$ pip install beautifulsoup4
12
2
$ pip install beautifulsoup4
14
3
$ pip install beautifulsoup4
9
$ pip install beautifulsoup4
17
1
0
$ pip install beautifulsoup4
19
1
2
1
4
$ pip install beautifulsoup4
22
1
6
$ pip install beautifulsoup4
24
1
7
$ pip install beautifulsoup4
26
1
9
$ pip install beautifulsoup4
28
$ python setup.py install
1
$ pip install beautifulsoup4
30
$ python setup.py install
3
$ pip install beautifulsoup4
28
$ python setup.py install
5
$ pip install beautifulsoup4
30
$ python setup.py install
6
$ pip install beautifulsoup4
28
$ python setup.py install
8
$ pip install beautifulsoup4
38

Kamu juga bisa mengakses orang tua dari elemen menggunakan atribut

1
17. Begitu pula kamu bisa mengakses semua leluhur elemen menggunakanatribut 
1
18. Orang tua dari tag
1
19 adalah objek
$ pip install beautifulsoup4
84 itu sendiri, dan orang tuanya adalah None.

1
$ pip install beautifulsoup4
40
2
$ pip install beautifulsoup4
42
3
$ pip install beautifulsoup4
9
$ pip install beautifulsoup4
45
1
0
$ pip install beautifulsoup4
47
1
2
$ pip install beautifulsoup4
42
1
4
$ pip install beautifulsoup4
42
1
6
$ pip install beautifulsoup4
42
1
7
$ pip install beautifulsoup4
55
1
9
$ pip install beautifulsoup4
57
$ python setup.py install
1
$ pip install beautifulsoup4
59

Kamu bisa mengakses elemen saudara sebelum dan sesudah menggunakan atribut

1
21 dan
1
22.

Untuk dua elemen menjadi saudara, mereka harus memiliki orang tua yang sama. Artinya anak pertama dari elemen tidak akan memiliki saudara sebelumnya. Begitu pula, anak terakhir dari sebuah elemen tidak akan punya saudara berikutnya. Dalam halaman web sebenarnya, saudara sebelum dan berikutnya dari sebuah elemen kemungkinan besar adalan karakter ganti baris.

Kamu juga bisa mengiterasi semua saudara sebuah elemen menggunakan

1
23 dan
1
24.

1
$ pip install beautifulsoup4
61
2
$ pip install beautifulsoup4
63
3
$ pip install beautifulsoup4
9
$ pip install beautifulsoup4
66
1
0
$ pip install beautifulsoup4
68
1
2
1
4
$ pip install beautifulsoup4
71
1
6
$ pip install beautifulsoup4
73
1
7
1
9
$ pip install beautifulsoup4
76
$ python setup.py install
1
$ pip install beautifulsoup4
78

Kamu bisa pindah ke elemen setelah elemen ini menggunakan atribut

1
25. Untuk mengakses elemen sebelumnya, gunakan atribut
1
26.

Begitu pula kamu bisa mengiterasi semua elemen sebelum dan sesudah sebuah elemen menggunakan

1
27 dan
1
28.

Penutup

Setelah menyelesaikan tutorial ini, kamu sudah mengetahui perbedaan utama antar berbagai parser HTML. Kamu juga seharusnya sudah bisa menjelajah halaman web dan mengambil data penting. Hal ini bisa berguna ketika kamu ingin menganalisis semua judul bagian atau tautan dari sebuah situs web.

Pada bagian berikutnya dari seri ini, kamu akan belajar bagaimana menggunakan library Beautiful Soup untuk mencari dan memodifikasi DOM.