首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python lxml的DOMDocument接口

python lxml的DOMDocument接口
EN

Stack Overflow用户
提问于 2011-10-24 21:24:18
回答 4查看 2K关注 0票数 5

我已经编写了一个小应用程序,它需要能够访问底层HTML页面的DOM表示。Lxml真的很棒,但我还没能找到这样的接口。是否有人知道是否存在这样的工具,或者是否有其他工具可以做到这一点?

EN

回答 4

Stack Overflow用户

发布于 2011-11-02 16:26:33

使用According to the lxml documentation,可以使用lxml解析文档,它的SAX解析器可以与Python模块交互以创建xml.dom.pulldom对象。在文档中,代码可能如下所示:

代码语言:javascript
运行
复制
from xml.dom.pulldom import SAX2DOM
handler = SAX2DOM()
lxml.sax.saxify(tree, handler)
dom = handler.document
票数 2
EN

Stack Overflow用户

发布于 2011-11-02 20:42:19

lxml site上有一个example of parsing HTML

代码语言:javascript
运行
复制
>>> from lxml import etree
>>> from StringIO import StringIO

>>> broken_html = "<html><head><title>test<body><h1>page title</h3>"

>>> parser = etree.HTMLParser()
>>> tree   = etree.parse(StringIO(broken_html), parser)

>>> result = etree.tostring(tree.getroot(),
...                         pretty_print=True, method="html")
>>> print(result)
<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <h1>page title</h1>
  </body>
</html>

您可以使用tree.find, tree.findall, tree.iter, tree.xpath和其他方法访问树元素。例如:

代码语言:javascript
运行
复制
>>> tree.getroot().getchildren()
[<Element head at 0x4f4ad38>, <Element body at 0x4f4ad80>]

>>> tree.getroot()..find('body')
<Element body at 0x4f4ad80>

您还可以使用标准的Python XML接口,正如Kurt所指出的那样:

代码语言:javascript
运行
复制
>>> from xml.dom.pulldom import SAX2DOM
>>> handler = SAX2DOM()
>>> lxml.sax.saxify(tree, handler)

>>> dom = handler.document
>>> print(dom.firstChild.localName)

但请记住lxml API is superior to dom/minidom

票数 2
EN

Stack Overflow用户

发布于 2011-11-05 23:15:10

我已经在需要DOM表示的几个项目中使用了minidom (特别是示例19.7.2)。

事实证明,它对于解析xml配置文件和清理写得很差的HTML很有用。我想向您灌输对minidom的信心,因为它在实践中是一个非常有用的工具!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7876287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档