Я работаю над сценарием, использующим lxml.html для разбора веб-страниц. В свое время я сделал немало BeautifulSoup, но сейчас экспериментирую с lxml из-за его скорости.
Я хотел бы знать, какой самый разумный способ в библиотеке - сделать эквивалент InnerHtml в Javascript, то есть получить или установить полное содержимое тега.
<body>
<h1>A title</h1>
<p>Some text</p>
</body>
InnerHtml поэтому:
<h1>A title</h1>
<p>Some text</p>
Я могу сделать это, используя хаки (преобразование в строку / регулярные выражения и т. Д.), Но я предполагаю, что есть правильный способ сделать это, используя библиотеку, которую мне не хватает из-за незнакомости. Спасибо за любую помощь.
РЕДАКТИРОВАТЬ: Спасибо побк за то, что показал мне путь к этому так быстро и эффективно. Для тех, кто пытается сделать то же самое, вот что я закончил:
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 исправит незамкнутый тег, поэтому будьте осторожны, если это проблема.