Существует пример анализа HTML на lxml сайте :
>>> from lxml import etree
>>> from StringIO import StringIO
>>> broken_html = "<html><head><title>test<body><h1>page title</h3>"
>>> parser = etree.HTMLParser()
>>> tree = etree.parse(StringIO(broken_html), parser)
>>> result = etree.tostring(tree.getroot(),
... pretty_print=True, method="html")
>>> print(result)
<html>
<head>
<title>test</title>
</head>
<body>
<h1>page title</h1>
</body>
</html>
Вы можете получить доступ к элементам дерева, используя методы tree.find, tree.findall, tree.iter, tree.xpath
и другие. Например:
>>> tree.getroot().getchildren()
[<Element head at 0x4f4ad38>, <Element body at 0x4f4ad80>]
>>> tree.getroot()..find('body')
<Element body at 0x4f4ad80>
Вы также можете использовать стандартные интерфейсы Python XML, как было указано Куртом:
>>> from xml.dom.pulldom import SAX2DOM
>>> handler = SAX2DOM()
>>> lxml.sax.saxify(tree, handler)
>>> dom = handler.document
>>> print(dom.firstChild.localName)
Но помните, что lxml API превосходит dom / minidom .