Python:使用 `lxml.html` 将 HTML 内容注入(inject)到标签中

标签 python html parsing lxml

我正在使用 lxml.html用于解析 HTML 文档的库。

我找到了一个特定的标签,我称之为 content_tag ,我想更改它的内容(即 <div></div> 之间的文本),新内容是一个包含一些 html 的字符串,比如 'Hello <b>world!</b>' .

我该怎么做?我试过 content_tag.text = 'Hello <b>world!</b>'但随后它转义了所有 html 标签,替换了 <&lt;

我想注入(inject)文本而不转义任何 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

编辑: 所以,我早该承认我对 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)

关于Python:使用 `lxml.html` 将 HTML 内容注入(inject)到标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030987/

相关文章:

python - 检查输入是否为有效的罗马数字

python - Pandas 分层索引和计算

javascript - 如何使用 Jquery 选择动态添加的元素

java - 从非结构化文件中解析数据

ruby - 如何将文本拆分为键值对?

python del vs pandas drop

python - Pandas TimerGrouper : Index with beginning

html - 如何在 Angular Material 卡中使用图片元素

javascript - 如何删除elem和下一个弹窗?

python - 解析python代码进行静态分析