【问题标题】:How to parse HTML with Python 3.8 xml.etree?如何使用 Python 3.8 xml.etree 解析 HTML?
【发布时间】: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。

标签: python html xml elementtree


【解决方案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,感谢您提供帮助的愿望,但您的回答与问题无关。我希望你能再次阅读这个问题,然后再试一次。欢迎其他人提出建议。
猜你喜欢
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
相关资源
最近更新 更多