我正在使用lxml.html
解析 HTML 文档的库。
我找到了一个特定的标签,我称之为content_tag
,并且我想更改其内容(即之间的文本<div>
and </div>
,) 新内容是一个字符串,其中包含一些 html,比如说'Hello <b>world!</b>'
.
我怎么做?我试过content_tag.text = 'Hello <b>world!</b>'
但随后它转义了所有 html 标签,替换<
with <
etc.
我想插入文本without转义任何 HTML。我怎样才能做到这一点?
这是一种方法:
#!/usr/bin/env python2.6
from lxml.html import fromstring, tostring
from lxml.html import builder as E
fragment = """\
<div id="outer">
<div id="inner">This is div.</div>
</div>"""
div = fromstring(fragment)
print tostring(div)
# <div id="outer">
# <div id="inner">This is div.</div>
# </div>
div.replace(div.get_element_by_id('inner'), E.DIV('Hello ', E.B('world!')))
print tostring(div)
# <div id="outer">
# <div>Hello <b>world!</b></div></div>
也可以看看:http://lxml.de/lxmlhtml.html#creating-html-with-the-e-factory http://lxml.de/lxmlhtml.html#creating-html-with-the-e-factory
Edit:所以,我应该早点承认我对 lxml 不太熟悉。我简要查看了文档和源代码,但没有找到干净的解决方案。也许,更熟悉的人会过来并纠正我们俩的错误。
与此同时,这似乎有效,但尚未经过充分测试:
import lxml.html
content_tag = lxml.html.fromstring('<div>Goodbye.</div>')
content_tag.text = '' # assumes only text to start
for elem in lxml.html.fragments_fromstring('Hello <b>world!</b>'):
if type(elem) == str: #but, only the first?
content_tag.text += elem
else:
content_tag.append(elem)
print lxml.html.tostring(content_tag)
再次编辑:这个版本删除了文本和子项
somehtml = 'Hello <b>world!</b>'
# purge element contents
content_tag.text = ''
for child in content_tag.getchildren():
content_tag.remove(child)
fragments = lxml.html.fragments_fromstring(somehtml)
if type(fragments[0]) == str:
content_tag.text = fragments.pop(0)
content_tag.extend(fragments)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)