有没有办法用lxml解析HTML,使用minidom进行操作?
我有一个应用程序,里面使用了html5lib来解析HTML内容。我使用的是minidom接口,因为我需要一个真正的DOM API,而ElementTree不太适合我现在的需求。
这是我实现的方式:
parser = html5lib.XHTMLParser(tree=html5lib.treebuilders.getTreeBuilder('dom'))
parser.parse(html)
不过,解析非常大的文件变得很慢,性能成了瓶颈。而且我测试过,lxml的解析速度比html5lib快大约80倍。
我该如何使用lxml或者其他类似的快速且能容忍糟糕HTML的库来解析,并且用一个兼容DOM的API来进行操作呢?
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这个过程花费的时间还挺长的。