欢迎访问宙启技术站
智能推送

使用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解析器,并根据需要提取所需的数据。