Materi
Kadang data yang dibutuhkan hanya tersedia sebagai tabel di halaman web, misalnya daftar harga pemasok. Halaman itu bisa disimpan sebagai berkas .html lalu diurai dengan html.parser dari pustaka standar, tanpa memasang paket apa pun. Caranya: buat kelas turunan HTMLParser, timpa method yang dipanggil parser, lalu serahkan teks HTML ke feed().
from html.parser import HTMLParser
class PengambilJudul(HTMLParser):
def __init__(self):
super().__init__()
self.di_h2 = False
self.judul = []
def handle_starttag(self, tag, attrs):
if tag == "h2":
self.di_h2 = True
def handle_endtag(self, tag):
if tag == "h2":
self.di_h2 = False
def handle_data(self, data):
if self.di_h2 and data.strip():
self.judul.append(data.strip())
p = PengambilJudul()
p.feed("<H2>Promo</H2><p>isi</p><h2>Kopi & Teh</h2>")
print(p.judul) # ['Promo', 'Kopi & Teh']handle_starttag(tag, attrs) dipanggil di setiap tag pembuka, handle_endtag(tag) di setiap tag penutup, dan handle_data(data) untuk teks di antaranya. Dokumentasi html.parser menyebut nama tag dan nama atribut selalu diubah ke huruf kecil, attrs berupa list pasangan (nama, nilai) dengan nilai None untuk atribut tanpa nilai, dan rujukan karakter seperti & otomatis menjadi &. Parser tidak memeriksa apakah tag penutup cocok dengan pembukanya, jadi penanda posisi seperti self.di_h2 diatur sendiri.
Kapan dipakai: halaman statis yang strukturnya jelas dan sudah tersimpan. Pengurai bergantung pada susunan tag halaman, jadi bila susunannya berubah, kodenya ikut diubah; cocokkan hasilnya dengan halaman setiap kali berkas baru diterima.