Я работаю над script с помощью lxml.html для анализа веб-страниц. В свое время я немного поработал над BeautifulSoup, но теперь я экспериментирую с lxml из-за его скорости.
Я хотел бы знать, какой самый разумный способ в библиотеке - сделать эквивалент Javascript InnerHtml - то есть получить или установить полное содержимое тега.
<body>
<h1>A title</h1>
<p>Some text</p>
</body>
InnerHtml:
<h1>A title</h1>
<p>Some text</p>
Я могу сделать это с помощью хаков (преобразование в строку/регулярные выражения и т.д.), но я предполагаю, что есть правильный способ сделать это, используя библиотеку, которую я пропускаю из-за незнания. Спасибо за любую помощь.
EDIT: Благодаря pobk за то, что он показал мне путь к этому так быстро и эффективно. Для тех, кто пытается то же самое, вот что я в итоге:
from lxml import html
from cStringIO import StringIO
t = html.parse(StringIO(
"""<body>
<h1>A title</h1>
<p>Some text</p>
Untagged text
<p>
Unclosed p tag
</body>"""))
root = t.getroot()
body = root.body
print (element.text or '') + ''.join([html.tostring(child) for child in body.iterdescendants()])
Обратите внимание, что синтаксический анализатор lxml.html фиксирует незакрытый тег, поэтому будьте осторожны, если это проблема.