使用HTMLParser.HTMLParser解析HTML表格中的数据
发布时间:2024-01-03 08:18:27
HTMLParser.HTMLParser是Python标准库中的一个类,用于解析HTML文档并提取其中的数据。它是一个基于事件的解析器,可以根据HTML标签的开始和结束来触发相应的事件方法。以下是一个使用HTMLParser.HTMLParser解析HTML表格数据的例子。
from html.parser import HTMLParser
# 自定义的HTML解析器
class MyHTMLParser(HTMLParser):
def __init__(self):
super().__init__()
self.in_table = False
self.in_row = False
self.in_cell = False
self.data = []
def handle_starttag(self, tag, attrs):
# 进入表格
if tag == 'table':
self.in_table = True
# 进入表格行
elif tag == 'tr' and self.in_table:
self.in_row = True
self.data.append([])
# 进入表格单元格
elif tag == 'td' and self.in_row:
self.in_cell = True
def handle_endtag(self, tag):
# 离开表格
if tag == 'table':
self.in_table = False
# 离开表格行
elif tag == 'tr':
self.in_row = False
# 离开表格单元格
elif tag == 'td':
self.in_cell = False
def handle_data(self, data):
# 提取表格数据
if self.in_cell:
self.data[-1].append(data.strip())
# HTML文档内容
html = """
<table>
<tr>
<td>Name</td>
<td>Age</td>
</tr>
<tr>
<td>John</td>
<td>25</td>
</tr>
<tr>
<td>Alice</td>
<td>30</td>
</tr>
</table>
"""
# 创建解析器实例
parser = MyHTMLParser()
# 解析HTML文档
parser.feed(html)
# 打印解析结果
for row in parser.data:
print(row)
以上代码定义了一个自定义的HTML解析器类MyHTMLParser,继承自HTMLParser。在handle_starttag、handle_endtag和handle_data方法中,我们定义了对HTML标签进行的处理操作。在handle_starttag方法中,我们判断是否进入了表格、表格行和表格单元格,并设置相应的标志位。在handle_endtag方法中,我们判断是否离开了表格、表格行和表格单元格,并重置相应的标志位。在handle_data方法中,我们提取表格单元格中的数据,并将其添加到self.data列表中。
在主程序中,我们定义了一个包含表格数据的HTML文档,并创建了解析器实例。然后,我们使用parser.feed(html)方法将HTML文档传递给解析器进行解析。解析完毕后,我们可以通过parser.data列表获取解析结果,其中每个子列表表示一行数据。
运行以上代码,输出结果为:
['Name', 'Age'] ['John', '25'] ['Alice', '30']
以上代码演示了如何使用HTMLParser.HTMLParser解析HTML表格中的数据,通过继承HTMLParser并重写相应的事件方法,可以实现自定义的HTML解析器,并根据需要提取所需的数据。
