我有一个应用程序,我一直在使用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进行操作?
答案 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调用需要很长时间。