如何在Python中使用有效的HTML字符串替换整个div?

时间:2019-01-12 13:45:16

标签: python html beautifulsoup

我正在尝试使用json中包含的html字符串填充许多模板化的html文档。例如,我的html可能看起来像:

<div class="replace_this_div">
<div>
<p>this text</p>
<p>should be replaced</p>
</div>
</div>

替换形式为字符串形式,如下所示:

"<p>My replacement code might have standard paragraphs, <a href="fake_link">links</a>, or other html elements such as lists.</p>"

然后,它应该看起来像这样:

<div class="replace_this_div">
"<p>My replacement code might have standard paragraphs, <a href="fake_link">links</a>, or other html elements such as lists.</p>"
</div>

我在BeautifulSoup中弄乱了一些,试图做到这一点。我遇到的问题是,即使我只是想替换指定div中的所有内容,我也无法弄清楚如何使用已经格式化为html的字符串(特别是beautifulsoup使用标签的方式)来做到这一点。 / p>

有人对此有任何见识吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用clear()清除标签的内容。然后,通过调用构造函数从字符串中创建BeautifulSoup对象。然后使用append()添加原始标签。

from bs4 import BeautifulSoup
html="""
<div class="replace_this_div">
<div>
<p>this text</p>
<p>should be replaced</p>
</div>
</div>
"""
new_content=u'<p>My replacement code might have standard paragraphs, <a href="fake_link">links</a>, or other html elements such as lists.</p>'
soup=BeautifulSoup(html,'html.parser')
outer_div=soup.find('div',attrs={"class":"replace_this_div"})
outer_div.clear()
outer_div.append(BeautifulSoup(new_content,'html.parser'))
print(soup.prettify())

输出

<div class="replace_this_div">
<p>
 My replacement code might have standard paragraphs,
 <a href="fake_link">
  links
 </a>
 , or other html elements such as lists.
</p>
</div>