2

我有一个应用程序,我一直在使用 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 进行操作?

4

1 回答 1

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 调用需要相当长的时间。

于 2009-11-20T17:36:50.430 回答