如何使用python的lxmletree和xpath从选择的节点获取(打印)所有内部html?

2024-09-28 20:16:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从使用etree xpath选择的节点获取所有内部html:

>>> from lxml import etree
>>> from StringIO import StringIO
>>> doc = '<foo><bar><div>привет привет</div></bar></foo>'
>>> hparser = etree.HTMLParser()
>>> htree = etree.parse(StringIO(doc), hparser)
>>> foo_element = htree.xpath("//foo")

我现在如何将foo峎u元素的内部HTML打印为文本?我需要得到这个:

^{pr2}$

顺便说一句,当我试图使用lxml.html.tostring时,我得到了奇怪的输出:

>>> import lxml.etree
>>> lxml.html.tostring(foo_element[0])
'<foo><bar><div>&#208;&#191;&#209;&#128;&#208;&#184;&#208;&#178;&#208;&#181;&#209;&#130; &#208;&#191;&#209;&#128;&#208;&#178;&#208;&#184;&#208;&#181;&#209;&#130;</div></bar></foo>'

Tags: fromimportdivdocfoohtmlbarelement
1条回答
网友
1楼 · 发布于 2024-09-28 20:16:09

您可以应用与this other SO post中所示相同的技术。关于这个问题的例子:

>>> from lxml import etree
>>> from lxml import html
>>> from StringIO import StringIO
>>> doc = '<foo><bar><div>TEST NODE</div></bar></foo>'
>>> hparser = etree.HTMLParser()
>>> htree = etree.parse(StringIO(doc), hparser)
>>> foo_element = htree.xpath("//foo")
>>> print ''.join(html.tostring(e) for e in foo_element[0])
<bar><div>TEST NODE</div></bar>

或者在元素可能包含文本节点子节点时处理大小写:

^{pr2}$

对于实际情况,强烈建议将代码重构为一个单独的函数,如链接帖子所示。在

相关问题 更多 >