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 № 1Acho 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.