如何使用 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区别