代码之家  ›  专栏  ›  技术社区  ›  Christian Oudard

有没有办法用lxml解析html,但用minidom操作它?

  •  2
  • Christian Oudard  · 技术社区  · 16 年前

    我有一个应用程序,我一直在使用html5lib自由解析html。我使用minidom接口,因为我需要一个真正的domapi,而ElementTree不适合我正在做的事情。

    我是这样做的:

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

    然而,解析大型文件正在成为性能瓶颈,lxml解析速度大约是html5lib的80倍(我对其进行了基准测试)。

    如何使用lxml或类似的快速糟糕的html容忍库进行解析,并使用与DOM兼容的API进行操作?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Christian Oudard    16 年前

    我想我找到了解决办法:

    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通话需要很长时间。