首页 > 解决方案 > 美丽的汤 insert_before 和 after 不工作

问题描述

我有两个 Beautiful Soup 标签,我试图一个接一个地放置,所以我正在使用insert_before(并且也尝试过insert_after作为另一种选择)。该功能似乎对任何一个标签都没有任何影响。我希望结果是,在函数调用之后,对象new_p包含embed在现有<p>标记之后。

这显示了终端(断点内)中的事务状态(对象类型、函数效果)——有什么想法吗?

ipdb> type(embed)
<class 'bs4.element.Tag'>
ipdb> embed
<embed alt=" Refugee Tales)" caption=" Refugee Tales)" embedtype="image" format="fullwidth" id="1691"/>
ipdb> type(new_p)
<class 'bs4.element.Tag'>
ipdb> new_p
<p> Refugee Tales walk (Photo: Refugee Tales)</p>
ipdb> type(html)
<class 'bs4.BeautifulSoup'>
ipdb> new_p in html
True
ipdb> embed in html
False
ipdb> new_p.insert_before(embed)
ipdb> embed in html
True
ipdb> new_p
<p> Refugee Tales walk (Photo: Refugee Tales)</p>
ipdb> embed
<embed alt=" Refugee Tales)" caption=" Refugee Tales)" embedtype="image" format="fullwidth" id="1691"/>
ipdb> new_p.insert_after(embed)
ipdb> new_p
<p> Refugee Tales walk (Photo: Refugee Tales)</p>
ipdb> embed
<embed alt=" Refugee Tales)" caption=" Refugee Tales)" embedtype="image" format="fullwidth" id="1691"/> 

名称:beautifulsoup4 版本:4.6.0

标签: pythonbeautifulsoup

解决方案


from bs4 import BeautifulSoup
html = "<p> Refugee Tales walk (Photo: Refugee Tales)</p>"
new_p = BeautifulSoup(html, "html")

embed=new_p.new_tag("embed",alt=" Refugee Tales)", caption=" Refugee Tales)", embedtype="image", format="fullwidth", id="1691")

要将嵌入标签放置在 p 标签内,您需要:

new_p.p.append(embed)

要将嵌入标签放在 p 标签之后,您需要:

new_p.p.insert_after(embed)

推荐阅读