Lớp HTMLParser được định nghĩa trong module này cung cấp chức năng parse (phân tích) tài liệu HTML và XHTML. Lớp này chứa các phương thức handler có thể nhận diện tag, dữ liệu, comment và các phần tử HTML khác.
Chúng ta phải định nghĩa một lớp mới kế thừa lớp HTMLParser và gửi văn bản HTML dùng phương thức feed().
from html.parser import HTMLParser
class parser(HTMLParser):
pass
p = parser()
p.feed('')
Chúng ta phải override (ghi đè) các phương thức sau:
handle_starttag(tag, attrs):
Tag HTML thường thành cặp tag mở và tag đóng. Ví dụ <head> và </head>. Phương thức này được gọi để xử lý phần bắt đầu của tag.
Tên tag được chuyển thành chữ thường. Đối số attrs đại diện cho các thuộc tính tìm thấy bên trong ngoặc <><> của tag.
Ví dụ, cho tag <a href="www.tutorialspoint.com"></a>, được đưa cho đối tượng parser.
from html.parser import HTMLParser
class parser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Start tag:", tag)
for attr in attrs:
print(" attr:", attr)
p = parser()
p.feed('')
Kết quả
Start tag: a
attr: ('href', 'www.tutorialspoint.com')
handle_endtag(tag):
Phương thức này được gọi để xử lý tag kết thúc của một phần tử.
def handle_endtag(self, tag):
print("end tag", tag)
handle_data(data):
Phương thức này được gọi để xử lý dữ liệu tùy ý giữa các tag. Ví dụ:
def handle_data(self, data):
print(data)
p = parser()
html = '''
Tutorialspoint
Python standard library
HTML module
'''
p.feed(html)
Kết quả
Start tag: h1
Tutorialspoint
end tag h1
Start tag: b
Python standard library
end tag b
Start tag: p
HTML module
end tag p
Các phương thức khác trong lớp HTMLParser:
get_starttag_text()
Trả về văn bản của start tag gần nhất được mở.
getpos()
Trả về số dòng hiện tại và offset.
handle_startendtag(tag, attrs)
Tương tự handle_starttag(), nhưng được gọi khi parser gặp tag rỗng kiểu XHTML (<img ... />).
handle_comment(data)
Phương thức này được gọi khi gặp comment (ví dụ: <!--comment-->).