如何使用 Python 3.8 xml.etree 解析 HTML?

Posted

技术标签:

【中文标题】如何使用 Python 3.8 xml.etree 解析 HTML?【英文标题】:How to parse HTML with Python 3.8 xml.etree? 【发布时间】:2021-12-26 18:07:44 【问题描述】:

我需要使用 Python 3.8 xml 包解析 html 文件。这一定是可能的,因为某些xml.etree.ElementTree 方法具有将"xml""html" 作为值的参数,但我找不到它是如何完成的示例。

当我尝试解析 HTML 文件时出现异常:

htmlRoot = etree.ElementTree.parse(filepathname).getroot()

解析器在遇到 HTML 实体时会抛出“未定义实体”异常。我认为这是因为 HTML 实体是预定义的,而 XML 实体不是。

正如语句所示,我使用的是默认解析器。也许有一个 HTML 解析器,但我还没有找到。我什至不确定是否有 其他解析器,或者我必须自己动手。

我不想使用 Python 的 html 包,因为我需要像 xml.etree 提供的那样遍历完整的解析树。 html 包不能那样工作。

我找到了使用 lxml 包解析 HTML 的示例,但 lxml 不是标准 Python 配置的一部分。对于不懂 Python 并且需要“即插即用”应用程序的同事来说,这将是一个问题。

【问题讨论】:

ElementTree 是一个 XML 工具。它不能用于处理任意 HTML。 【参考方案1】:
<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
    <rank>68</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
</country>
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
root = ET.fromstring(country_data_as_string)
for child in root:
    print(child.tag, child.attrib)

阅读本文了解更多详情 https://docs.python.org/3/library/xml.etree.elementtree.html

【讨论】:

你的答案与问题有什么关系? 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 Opoke Loveth,感谢您提供帮助的愿望,但您的回答与问题无关。我希望你能再次阅读这个问题,然后再试一次。欢迎其他人提出建议。

以上是关于如何使用 Python 3.8 xml.etree 解析 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

在Python中,如何使用xml.etree.ElementTree创建数据帧?

如何使用python xml.etree ElementTree类过滤元素

如何使用 xml.etree.ElementTree 编写 XML 声明

python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别

使用 xml.etree.ElementTree 在 python 中解析 XML

[python 学习] 使用 xml.etree.ElementTree 模块处理 XML