在beautifulsoup建立段落标记

时间:2014-05-31 23:53:59

标签: python beautifulsoup

我想在汤中添加一个段落。该段应该看起来像 -

<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 个答案:

答案 0 :(得分:2)

您可以在 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>