python - 在 beautifulsoup 中构建段落标签

标签 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 标签被跳过。所以我猜它确实没有正确添加。

任何意见都将不胜感激。谢谢

最佳答案

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

关于python - 在 beautifulsoup 中构建段落标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975524/

相关文章:

python - Beautiful Soup findAll() 对 findall() 的结果返回 TypeError

python - 漂亮的汤,不包括父 <li> 标签上的内部 <li> 和 <ul> 标签 .getText()

python - 无法使用来自 Docker 容器的 SSH 隧道连接到远程数据库

python - 比较三个 pandas 列以确定预测

python - 如何使用服务主体和 Python SDK 向 Azure 进行身份验证?

python-3.x - BeautifulSoup 和 pd.read_html - 如何将链接保存到最终数据框中的单独列中?

python - BS4 getText 函数产生意外的输出

python - 如何创建矩阵模板来检查句子相似度?

python - 如何导入和使用从自身内部的另一个文件导入类的 python 模块?

python - 如何使用 BeautifulSoup 发送 key