Я использую lxml
-v 3.7.3, я пытаюсь проанализировать список частей html кода, изменить значение некоторых определенных атрибутов узла, а затем сохранить их.
В основном это мой код:
from lxml import etree
# parsing of the html fragment
parser = etree.HTMLParser()
xhtml = etree.parse(io.StringIO('<a href="http://www.example.com">hello world</a>'), parser)
root = xhtml.getroot()
# change href from example.com to otherexample.com
[...]
# render the elements tree as a string
etree.tostring(root, encoding='unicode', method='html')
Output:
<html><body><a href='http://www.otherexample.com'>hello world</a></body></html>
У меня проблема в том, что теги <html>
и <body>
всегда добавляются к отображаемому html.
Мне нужна строка <a href='http://www.otherexample.com'>hello world</a>
, потому что то, что я обрабатываю, является частью документа HTML, а не всего документа.
Я знаю, что мог бы просто удалить окружающие теги, но это выглядит очень хакерским.
Какие-либо предложения?
РЕДАКТИРОВАТЬ:
Разметка, которую я имею на входе, где-то сломана или не соответствует HTML. Вот пример:
<p><a href="http://www.example.com">hello world</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><p>
Ожидаемый результат:
<p><a href="http://www.otherexample.com">hello world</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><p>