/ / Existe uma maneira de analisar html com lxml, mas manipulá-lo com minidom? - python, html, dom, análise, lxml

Existe uma maneira de analisar html com lxml, mas manipulá-lo com o minidom? - python, html, dom, análise, lxml

Eu tenho um aplicativo em que tenho usado o html5lib para analisar liberalmente o html. Uso a interface minidom, porque preciso de uma API DOM real e o ElementTree não é apropriado para o que estou fazendo.

Aqui está como eu faço isso:

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

No entanto, a análise de arquivos enormes está se tornando um gargalo de desempenho, e a análise de lxml é cerca de 80 vezes mais rápida que o html5lib (eu o comparei).

Como analiso com lxml ou uma biblioteca tolerante a html da mesma forma rápida e manipula com uma API compatível com DOM?

Respostas:

4 para resposta № 1

Acho que encontrei uma solução:

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

No entanto, isso é apenas cerca de 7 vezes mais rápido que o html5lib. A chamada saxify leva um bom tempo.