2

私は、html5lib を使用して自由に html を解析しているアプリケーションを持っています。私は実際の DOM API が必要であり、ElementTree は私がやっていることには適していないため、minidom インターフェースを使用します。

これが私がこれを行う方法です:

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

ただし、巨大なファイルの解析がパフォーマンスのボトルネックになりつつあり、lxml の解析は html5lib よりも約 80 倍高速です (ベンチマークしました)。

lxml または同様に高速な bad-html-tolerant ライブラリで解析し、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 に答える