有没有办法用lxml解析html,但用minidom操纵它?

时间:2009-11-20 17:25:15

标签: python html dom parsing lxml

我有一个应用程序,我一直在使用html5lib来解析html。我使用minidom接口,因为我需要一个真正的DOM API,并且ElementTree不适合我正在做的事情。

我是这样做的:

parser = html5lib.XHTMLParser(tree=html5lib.treebuilders.getTreeBuilder('dom'))
parser.parse(html)

但是,解析大文件正成为性能瓶颈,而lxml解析比html5lib快了大约80倍(我对它进行了基准测试)。

如何解析lxml或类似的快速bad-html容错库,并使用与DOM兼容的API进行操作?

1 个答案:

答案 0 :(得分:4)

想想我找到了解决方案:

from xml.dom.pulldom import SAX2DOM
import lxml.sax
def parse_lxml_dom(html):
    tree = lxml.html.document_fromstring(html)
    handler = SAX2DOM()
    lxml.sax.saxify(tree, handler)
    return handler.document

然而,这只比html5lib快约7倍。 saxify调用需要很长时间。