我已经编写了一个小应用程序,它需要能够访问底层HTML页面的DOM表示。Lxml真的很棒,但我还没能找到这样的接口。是否有人知道是否存在这样的工具,或者是否有其他工具可以做到这一点?
发布于 2011-11-02 16:26:33
使用According to the lxml documentation,可以使用lxml解析文档,它的SAX解析器可以与Python模块交互以创建xml.dom.pulldom对象。在文档中,代码可能如下所示:
from xml.dom.pulldom import SAX2DOM
handler = SAX2DOM()
lxml.sax.saxify(tree, handler)
dom = handler.document
发布于 2011-11-02 20:42:19
在lxml site上有一个example of parsing HTML
>>> 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
和其他方法访问树元素。例如:
>>> tree.getroot().getchildren()
[<Element head at 0x4f4ad38>, <Element body at 0x4f4ad80>]
>>> tree.getroot()..find('body')
<Element body at 0x4f4ad80>
您还可以使用标准的Python XML接口,正如Kurt所指出的那样:
>>> 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。
发布于 2011-11-05 23:15:10
我已经在需要DOM表示的几个项目中使用了minidom (特别是示例19.7.2)。
事实证明,它对于解析xml配置文件和清理写得很差的HTML很有用。我想向您灌输对minidom的信心,因为它在实践中是一个非常有用的工具!
https://stackoverflow.com/questions/7876287
复制相似问题