在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 个回答
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>