如何将新标签插入到BeautifulSoup对象中?

时间:2014-01-25 20:44:26

标签: python beautifulsoup

尝试用BS解决html构建问题。

我正在尝试插入新标签:

self.new_soup.body.insert(3, """<div id="file_history"></div>""")   

当我检查结果时,我得到:

&lt;div id="file_histor"y&gt;&lt;/div&gt;

所以我正在插入一个为websafe html进行清理的字符串..

我期望看到的是:

<div id="file_history"></div>

如何在位置3中插入标识为div的新file_history代码?

3 个答案:

答案 0 :(得分:24)

请参阅how to append a tag上的文档:

soup = BeautifulSoup("<b></b>")
original_tag = soup.b

new_tag = soup.new_tag("a", href="http://www.example.com")
original_tag.append(new_tag)
original_tag
# <b><a href="http://www.example.com"></a></b>

new_tag.string = "Link text."
original_tag
# <b><a href="http://www.example.com">Link text.</a></b>

答案 1 :(得分:12)

使用工厂方法创建新元素:

new_tag = self.new_soup.new_tag('div', id='file_history')

并插入:

self.new_soup.body.insert(3, new_tag)

答案 2 :(得分:8)

其他答案直接来自文档。这是捷径:

from bs4 import BeautifulSoup

temp_soup = BeautifulSoup('<div id="file_history"></div>')
# BeautifulSoup automatically add <html> and <body> tags
# There is only one 'div' tag, so it's the only member in the 'contents' list
div_tag = temp_soup.html.body.contents[0]
# Or more simply
div_tag = temp_soup.html.body.div
your_new_soup.body.insert(3, div_tag)