Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hỗ trợ HTML trong Python (HTMLParser)

Python cung cấp lớp HTMLParser trong module html.parser để phân tích cú pháp HTML. Có thể xử lý thẻ mở, thẻ đóng, dữ liệu, vị trí dòng/cột.

Ví dụ: tạo parser tùy chỉnh ghi nhận thẻ mở, thẻ đóng, dữ liệu và vị trí.

File HTML mẫu

<html>
<head>
<title>welcome to Tutorials Point!</title>
</head>
<body>
<h1>Learn anything !</h1>
</body>
</html>

Parser tùy chỉnh

from html.parser import HTMLParser
import io

class Custom_Parser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Line and Offset ==", HTMLParser.getpos(self))
        print("Encountered a start tag:", tag)
    def handle_endtag(self, tag):
        print("Line and Offset ==", HTMLParser.getpos(self))
        print("Encountered an end tag :", tag)
    def handle_data(self, data):
        print("Line and Offset ==", HTMLParser.getpos(self))
        print("Encountered some data :", data)

parser = Custom_Parser()
stream = io.open("E:\\test.html", "r")
parser.feed(stream.read())

Kết quả

Line and Offset == (1, 0) Encountered a start tag: html
Line and Offset == (1, 6) Encountered some data : 
Line and Offset == (2, 0) Encountered a start tag: head
Line and Offset == (2, 6) Encountered some data : 
Line and Offset == (3, 0) Encountered a start tag: title
Line and Offset == (3, 7) Encountered some data : welcome to Tutorials Point!
Line and Offset == (3, 34) Encountered an end tag : title
Line and Offset == (3, 42) Encountered some data : 
Line and Offset == (4, 0) Encountered an end tag : head
Line and Offset == (4, 7) Encountered some data : 
Line and Offset == (5, 0) Encountered a start tag: body
Line and Offset == (5, 6) Encountered some data : 
Line and Offset == (6, 0) Encountered a start tag: h1
Line and Offset == (6, 4) Encountered some data : Learn anything !
Line and Offset == (6, 20) Encountered an end tag : h1
Line and Offset == (6, 25) Encountered some data : 
Line and Offset == (7, 0) Encountered an end tag : body
Line and Offset == (7, 7) Encountered some data : 
Line and Offset == (8, 0) Encountered an end tag: html