在BeautifulSoup中构建段落标签

2 投票
1 回答
899 浏览
提问于 2025-04-18 08:09

我想在我的汤里加一个段落。这个段落应该看起来像这样 -

<p class="test-class"><strong>TEST MESSAGE</strong></p>

我已经有一段能做到这点的代码了。

paragraphTag = soup.new_tag('p')
paragraphTag['class'] = 'test-class'
strongTag = soup.new_tag('strong')
strongTag.append('TEST MESSAGE')
paragraphTag.append(strongTag)
paragraph.insert_before(paragraphTag)

注意,我使用insert_before是故意的,因为这是更大代码的一部分,我需要用到insert_before。

我的问题是 - 有没有更好的方法来做到这一点?或者有没有更简短的代码可以实现这个功能?另外,我尝试把所有内容放在一个字符串里,然后把它加到段落中。但是当我用find_all去查找所有的p标签时,这个新加的p标签却被跳过了。所以我想这可能没有被正确添加。

任何建议都会非常感谢。谢谢!

1 个回答

3

你可以在一个新的 BeautifulSoup()对象中构建你的代码片段,使用HTML格式:

html = '<p class="test-class"><strong>TEST MESSAGE</strong></p>'
snippet = BeautifulSoup(html).p.extract()
paragraph.insert_before(snippet)

这里的.extract()方法让这个操作变得可行;它会把这些元素从它们原来的文档模型中分离出来。

示例:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<html><body/></html>')
>>> html = '<p class="test-class"><strong>TEST MESSAGE</strong></p>'
>>> snippet = BeautifulSoup(html).p.extract()
>>> snippet
<p class="test-class"><strong>TEST MESSAGE</strong></p>
>>> soup.body.append(snippet)
>>> soup
<html><body><p class="test-class"><strong>TEST MESSAGE</strong></p></body></html>

撰写回答