Python解析HTML主要通过以下几种方式:
-
使用内置库
html.parser
:Python标准库中的html.parser
模块提供了一个基本的HTML解析器,适用于简单的HTML解析任务。 -
使用第三方库
BeautifulSoup
:BeautifulSoup
是一个功能强大的Python库,用于从HTML和XML文件中提取数据。它能够自动修正错误的HTML代码,并提供了简单易用的API来遍历和修改解析树。 -
使用第三方库
lxml
:lxml
是一个基于C语言的XML解析库,它提供了高效的HTML和XML解析功能。lxml
的HTML解析器能够处理复杂的HTML文档,并提供了丰富的API来操作解析树。
1. 使用内置库html.parser
html.parser
模块中的HTMLParser
类是一个基本的HTML解析器,它能够将HTML文档解析为一系列的事件,如开始标签、结束标签和数据。
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print(f"Start tag: {tag}")
for attr in attrs:
print(f" {attr[0]}={attr[1]}")
def handle_endtag(self, tag):
print(f"End tag: {tag}")
def handle_data(self, data):
print(f"Data: {data}")
parser = MyHTMLParser()
parser.feed("<html><head><title>Test</title></head><body><h1>Hello, world!</h1></body></html>")
2. 使用第三方库BeautifulSoup
BeautifulSoup
库提供了一个简单易用的API来遍历和修改解析树。它能够自动修正错误的HTML代码,并支持多种解析器,如html.parser
、lxml
和html5lib
。
from bs4 import BeautifulSoup
html_doc = "<html><head><title>Test</title></head><body><h1>Hello, world!</h1></body></html>"
soup = BeautifulSoup(html_doc, 'html.parser')
# 获取标题
title = soup.title.string
print(title) # 输出: Test
# 获取所有h1标签
h1_tags = soup.find_all('h1')
for tag in h1_tags:
print(tag.string) # 输出: Hello, world!
3. 使用第三方库lxml
lxml
库提供了高效的HTML和XML解析功能。它的HTML解析器能够处理复杂的HTML文档,并提供了丰富的API来操作解析树。
from lxml import html
html_doc = "<html><head><title>Test</title></head><body><h1>Hello, world!</h1></body></html>"
tree = html.fromstring(html_doc)
# 获取标题
title = tree.find('.//title').text
print(title) # 输出: Test
# 获取所有h1标签
h1_tags = tree.findall('.//h1')
for tag in h1_tags:
print(tag.text) # 输出: Hello, world!
总结
以上介绍了三种使用Python解析HTML的方式,包括使用内置库html.parser
、第三方库BeautifulSoup
和lxml
。每种方式都有其特点和适用场景,可以根据具体需求选择合适的解析方式。