2009-11-20 39 views
2

我有一個應用程序,我一直在使用html5lib來自由解析html。我使用minidom接口,因爲我需要一個真正的DOM API,並且ElementTree不適合我正在做的事情。有沒有辦法用lxml解析html,但用minidom操縱它?

這裏是我如何做到這一點:

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

然而,解析大文件正在成爲性能瓶頸,並LXML解析比html5lib(我爲基準的話)快約80倍。

我該如何解析lxml或類似的快速bad-html容錯庫,並使用DOM兼容API進行操作?

+0

ElementTree不適合你在做什麼?我的經驗是,lxml的API在各方面都比minidom更好。 – Allen 2011-02-09 18:45:56

+0

我需要手動操作文本節點,完全控制它們的分裂和標準化。 ElementTree API缺乏這種能力。 – 2011-02-11 20:39:51

回答

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調用需要很長時間。

+0

你的意思是比較慢? – Alex 2014-02-06 21:27:33