Trình phân tích cú pháp HTML là một công cụ xử lý đánh dấu có cấu trúc. Nó xác định một lớp có tên HTMLPARSER, được sử dụng để phân tích các tệp HTML. Nó có ích cho việc thu thập thông tin web.HTML parser is a structured markup processing tool. It defines a class called HTMLParser, which is used to parse HTML files. It comes in handy for web crawling.
Phương pháp
HTMLParser.feed(data): Được sử dụng để nhập dữ liệu vào trình phân tích cú pháp HTML.
HTMLParser.handle_starttag(tag, attrs): Được sử dụng để xử lý các thẻ bắt đầu trong HTML. Tham số tag chứa thẻ mở và tham số attrs chứa thuộc tính của thẻ đó.
HTMLParser.handle_endtag(tag, attrs): Được sử dụng để xử lý các thẻ cuối trong HTML. Tham số tag chứa thẻ đóng và tham số attrs chứa thuộc tính của thẻ đó.
from HTMLParser import HTMLParser # create a subclass and override the handler methods class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): print "Encountered a start tag:", tag def handle_endtag(self, tag): print "Encountered an end tag :", tag def handle_data(self, data): print "Encountered some data :", data # instantiate the parser and fed it some HTML parser = MyHTMLParser() parser.feed('<html><head><title>Test</title></head>' '<body><h2>Parse me!</h2></body></html>') 0: Được sử dụng để xử lý dữ liệu chứa giữa các thẻ HTML.
________ 11: Được sử dụng để xử lý các bình luận HTML.
Thí dụ
Các chức năng của htmlparser sẽ được ghi đè để cung cấp chức năng mong muốn. Lưu ý rằng lớp from HTMLParser import HTMLParser # create a subclass and override the handler methods class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): print "Encountered a start tag:", tag def handle_endtag(self, tag): print "Encountered an end tag :", tag def handle_data(self, data): print "Encountered some data :", data # instantiate the parser and fed it some HTML parser = MyHTMLParser() parser.feed('<html><head><title>Test</title></head>' '<body><h2>Parse me!</h2></body></html>') 2 kế thừa từ lớp from HTMLParser import HTMLParser # create a subclass and override the handler methods class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): print "Encountered a start tag:", tag def handle_endtag(self, tag): print "Encountered an end tag :", tag def handle_data(self, data): print "Encountered some data :", data # instantiate the parser and fed it some HTML parser = MyHTMLParser() parser.feed('<html><head><title>Test</title></head>' '<body><h2>Parse me!</h2></body></html>') 3.
from html.parser import HTMLParser
class Parser(HTMLParser):
# method to append the start tag to the list start_tags.
def handle_starttag(self, tag, attrs):
global start_tags
start_tags.append(tag)
# method to append the end tag to the list end_tags.
def handle_endtag(self, tag):
global end_tags
end_tags.append(tag)
# method to append the data between the tags to the list all_data.
def handle_data(self, data):
global all_data
all_data.append(data)
# method to append the comment to the list comments.
def handle_comment(self, data):
global comments
comments.append(data)
start_tags = []
end_tags = []
all_data = []
comments = []
# Creating an instance of our class.
parser = Parser()
# Poviding the input.
parser.feed('<html><title>Desserts</title><body><p>'
'I am a fan of frozen yoghurt.</p><'
'/body><!--My first webpage--></html>')
print("start tags:", start_tags)
print("end tags:", end_tags)
print("data:", all_data)
print("comments", comments)
Bản quyền © 2022 Giáo dục, Inc. Tất cả quyền được bảo lưu
Không giống như những gì Spudley nói, phân tích cú pháp về cơ bản là để giải quyết (một câu) vào các phần cấu thành của nó và mô tả vai trò cú pháp của chúng.resolve (a sentence) into its component parts and describe their syntactic roles.
Theo Wikipedia, phân tích phân tích cú pháp hoặc cú pháp là quá trình phân tích một chuỗi các ký hiệu, bằng ngôn ngữ tự nhiên hoặc bằng ngôn ngữ máy tính, theo các quy tắc của một ngữ pháp chính thức. Thuật ngữ phân tích cú pháp đến từ phân tích tiếng Latin (orationis), có nghĩa là phần (của lời nói).natural language or in computer languages, according to the rules of a formal grammar. The term parsing comes from Latin pars (orationis), meaning part (of speech).
Trong trường hợp của bạn, về cơ bản, phân tích cú pháp HTML là: lấy mã HTML và trích xuất thông tin liên quan như tiêu đề của trang, đoạn văn trong trang, tiêu đề trong trang, liên kết, văn bản táo bạo, v.v.
Phân tích cú pháp:
Một chương trình máy tính phân tích nội dung được gọi là trình phân tích cú pháp. Nói chung có 2 loại phân tích cú pháp:
Phân tích cú pháp từ trên xuống-Phân tích cú pháp từ trên xuống có thể được xem như là một nỗ lực để tìm các dẫn xuất nhiều nhất của dòng đầu vào bằng cách tìm kiếm các cây phân tích bằng cách sử dụng mở rộng từ trên xuống của các quy tắc ngữ pháp chính thức đã cho. Mã thông báo được tiêu thụ từ trái sang phải. Lựa chọn bao gồm được sử dụng để phù hợp với sự mơ hồ bằng cách mở rộng tất cả các mặt tay phải thay thế của các quy tắc ngữ pháp.- Top-down parsing can be viewed as an attempt to find left-most derivations of an input-stream by searching for parse trees using a top-down expansion of the given formal grammar rules. Tokens are consumed from left to right. Inclusive choice is used to accommodate ambiguity by expanding all alternative right-hand-sides of grammar rules.
Phân tích cú pháp từ dưới lên - Một trình phân tích cú pháp có thể bắt đầu với đầu vào và cố gắng viết lại nó thành ký hiệu bắt đầu. Theo trực giác, trình phân tích cú pháp cố gắng xác định vị trí các yếu tố cơ bản nhất, sau đó các yếu tố chứa các yếu tố này, v.v. Phân tích cú pháp LR là ví dụ của trình phân tích cú pháp từ dưới lên. Một thuật ngữ khác được sử dụng cho loại trình phân tích cú pháp này là phân tích cú pháp dịch chuyển. - A parser can start with the input and attempt to rewrite it to the start symbol. Intuitively, the parser attempts to locate the most basic elements, then the elements containing these, and so on. LR parsers are examples of bottom-up parsers. Another term used for this type of parser is Shift-Reduce parsing.
Một vài ví dụ phân tích cú pháp:
Trình phân tích cú pháp từ trên xuống:
- Trình phân tích con gốc đệ quy
- LL phân tích cú pháp (từ trái sang phải, dẫn xuất ngoài cùng trái)
- EARLEY SHARSER
Trình phân tích cú pháp từ dưới lên:
- Công cụ phân tích cú pháp ưu tiên
- Trình phân tích cú pháp vận hành
- Trình phân tích cú pháp ưu tiên đơn giản
- BC (bối cảnh giới hạn) phân tích cú pháp
- Trình phân tích cú pháp LR (từ trái sang phải, dẫn xuất ngoài cùng bên phải)Left-to-right, Rightmost derivation)
- Trình phân tích cú pháp LR (DSLR) đơn giản
- Trình phân tích cú pháp LALR
- Trình phân tích cú pháp LR (LR (1)) Canonical
- Trình phân tích cú pháp GLR
- Cyk Suy việc phân tích cú pháp
- Trình phân tích cú pháp đệ quy
Ví dụ trình phân tích cú pháp:
Dưới đây là một ví dụ HTML Phân tích cú pháp trong Python:
from HTMLParser import HTMLParser # create a subclass and override the handler methods class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): print "Encountered a start tag:", tag def handle_endtag(self, tag): print "Encountered an end tag :", tag def handle_data(self, data): print "Encountered some data :", data # instantiate the parser and fed it some HTML parser = MyHTMLParser() parser.feed('<html><head><title>Test</title></head>' '<body><h2>Parse me!</h2></body></html>')Đây là đầu ra:
Encountered a start tag: html Encountered a start tag: head Encountered a start tag: title Encountered some data : Test Encountered an end tag : title Encountered an end tag : head Encountered a start tag: body Encountered a start tag: h2 Encountered some data : Parse me! Encountered an end tag : h2 Encountered an end tag : body Encountered an end tag : html
Người giới thiệu
- Wikipedia
- Tài liệu Python