Имам приложение, в което използвам html5lib, за да разграничавам html.
Ето как правя това:
parser = html5lib.XHTMLParser(tree=html5lib.treebuilders.getTreeBuilder("dom"))
parser.parse(html)
Разделянето на огромни файлове обаче се превръща в пречка за изпълнение, а разборът на lxml е около 80 пъти по-бърз от html5lib (аз го сравнявам).
Как да анализирам с lxml или подобна бърза библиотека с лоша html-толерантност и да манипулирам с DOM-съвместим API?
Отговори:
4 за отговор № 1Мисля, че намерих решение:
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
Това обаче е само около 7 пъти по-бързо от html5lib. Саксифициращият разговор отнема доста време.