Интерфейс DOMDocument для Python lxml - PullRequest
5 голосов
/ 24 октября 2011

Я написал небольшое приложение, которое должно иметь доступ к представлению DOM базовой HTML-страницы.Lxml действительно хорош, но я не смог найти такой интерфейс.Кто-то знает, существует ли он или есть другой инструмент, который это делает?

Ответы [ 4 ]

2 голосов
/ 02 ноября 2011

Согласно документации lxml , можно использовать lxml для разбора документа, а его SAX-анализатор может взаимодействовать с модулем Python xml.dom.pulldom для создания объекта DOM.Из документации код может выглядеть следующим образом:

from xml.dom.pulldom import SAX2DOM
handler = SAX2DOM()
lxml.sax.saxify(tree, handler)
dom = handler.document
2 голосов
/ 02 ноября 2011

Существует пример анализа 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 .

0 голосов
/ 05 ноября 2011

Я использовал minidom (особенно пример 19.7.2) для нескольких проектов, где необходимо представление DOM.

Это оказалось полезным для анализа файлов конфигурации xml и очистки плохо написанного HTML.Я хотел бы внушить вам уверенность в минидоме, потому что это был такой полезный инструмент на практике!

0 голосов
/ 24 октября 2011
...