Mengurai HTML menggunakan Python

Parsing HTML adalah salah satu tugas paling umum yang dilakukan saat ini untuk mengumpulkan informasi dari situs web dan menambangnya untuk berbagai tujuan, seperti menetapkan kinerja harga suatu produk dari waktu ke waktu, ulasan buku di situs web, dan banyak lagi. Ada banyak perpustakaan seperti BeautifulSoup di Python yang mengabstraksi begitu banyak poin menyakitkan dalam mengurai HTML tetapi perlu diketahui bagaimana perpustakaan itu benar-benar bekerja di bawah lapisan abstraksi itu.

Dalam pelajaran ini, itulah yang ingin kami lakukan. Kami akan mencari tahu bagaimana nilai tag HTML yang berbeda dapat diekstraksi dan juga mengesampingkan fungsionalitas default modul ini untuk menambahkan beberapa logika kita sendiri. Kami akan melakukan ini menggunakan kelas HTMLParser dengan Python di modul html.parser. Mari kita lihat kodenya beraksi.

Melihat kelas HTMLParser

Untuk mengurai teks HTML dengan Python, kita dapat menggunakan kelas HTMLParser dalam modul html.parser. Mari kita lihat definisi kelas untuk kelas HTMLParser :

class html.parser.HTMLParser(*, convert_charrefs=True)

Bidang convert_charrefs, jika disetel ke True akan membuat semua referensi karakter dikonversi ke persamaan Unicode mereka. Hanya elemen skrip/gaya yang tidak dikonversi. Sekarang, kita akan mencoba memahami setiap fungsi untuk kelas ini juga untuk lebih memahami apa yang dilakukan setiap fungsi.

  • handle_startendtag Ini adalah fungsi pertama yang dipicu ketika string HTML diteruskan ke instance kelas. Setelah teks sampai di sini, kontrol diteruskan ke fungsi lain di kelas yang dipersempit ke tag lain di String. Ini juga jelas dalam definisi untuk fungsi ini:
    def handle_startendtag(self, tag, attrs):
    self.handle_starttag(tag, attrs)
    self.handle_endtag(tag)
  • handle_starttag : Metode ini mengelola tag awal untuk data yang diterimanya. Definisinya adalah seperti yang ditunjukkan di bawah ini:
    def handle_starttag(self, tag, attrs):
    pass
  • handle_endtag : Metode ini mengelola tag akhir untuk data yang diterimanya:
    def handle_endtag(self, tag):
    pass
  • handle_charref : Metode ini mengelola referensi karakter dalam data yang diterimanya. Definisinya adalah seperti yang ditunjukkan di bawah ini:
    def handle_charref(self, name):
    pass
  • handle_entityref : Fungsi ini menangani referensi entitas dalam HTML yang diteruskan ke sana:
    def handle_entityref(self, name):
    pass
  • handle_data : Ini adalah fungsi di mana pekerjaan nyata dilakukan untuk mengekstrak nilai dari tag HTML dan meneruskan data yang terkait dengan setiap tag. Definisinya adalah seperti yang ditunjukkan di bawah ini:
    def handle_data(self, data):
    pass
  • handle_comment : Dengan menggunakan fungsi ini, kita juga bisa mendapatkan komentar yang dilampirkan ke sumber HTML:
    def handle_comment(self, data):
    pass
  • handle_pi : Karena HTML juga dapat memiliki instruksi pemrosesan, ini adalah fungsi di mana definisinya adalah seperti yang ditunjukkan di bawah ini:
    def handle_pi(self, data):
    pass
  • handle_decl : Metode ini menangani deklarasi dalam HTML, definisinya diberikan sebagai:
    def handle_decl(self, decl):
    pass

Mensubklasifikasikan kelas HTMLParser

Di bagian ini, kita akan membuat sub-kelas kelas HTMLParser dan akan melihat beberapa fungsi yang dipanggil ketika data HTML diteruskan ke instance kelas. Mari kita menulis skrip sederhana yang melakukan semua ini:

from html.parser import HTMLParser

class LinuxHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Start tag encountered:", tag)

def handle_endtag(self, tag):
print("End tag encountered :", tag)

def handle_data(self, data):
print("Data found :", data)

parser = LinuxHTMLParser()
parser.feed(''
'
<h1>Python HTML parsing module</h1>
')

Inilah yang kami dapatkan kembali dengan perintah ini:

Python logo

Inilah yang kami dapatkan kembali dengan panggilan ini:

HTMLParser image tag

Selanjutnya, mari kita coba bagaimana tag skrip berperilaku dengan fungsi Python:

parser.feed('<script type="text/javascript">'
'alert("<strong>LinuxHint Python</strong>");</script>')
parser.feed('<style type="text/css">#python { color: green }</style>')
parser.feed('#python { color: green }')

Inilah yang kami dapatkan kembali dengan panggilan ini:

Script tag in htmlparser

Terakhir, kami juga memberikan komentar ke bagian HTMLParser:

parser.feed('<!-- This marks the beginning of samples. -->'
'<!-- [if IE 9]>IE-specific content<![endif]-->')

Inilah yang kami dapatkan kembali dengan panggilan ini:

Parsing comments

Parsing comments

Kesimpulan

Dalam pelajaran ini, kita melihat bagaimana kita dapat mengurai HTML menggunakan kelas HTMLParser Python sendiri tanpa perpustakaan lain. Kita dapat dengan mudah memodifikasi kode untuk mengubah sumber data HTML menjadi client HTTP.

Baca lebih banyak posting berbasis Python di sini.

Related Posts