You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BeautifulSoup获取<p><strong>标签之前的所有元素?

提取第一个

标签前的所有内容

要实现需求,核心是先精准定位到第一个包含的

标签,再收集它之前的所有兄弟节点(包括文本和标签),具体代码如下:

from bs4 import BeautifulSoup

example = """This should be in before section<p>Content before</p><p><strong>First Title</strong></p>Content of first title1<p>Content of first title2</p><p><strong>Second title</strong></p><p>Content of second title</p></strong>"""
soup = BeautifulSoup(example, 'html.parser')

# 定位第一个包含<strong>的<p>标签
target_p = soup.find(lambda tag: tag.name == 'p' and tag.find('strong'))

# 收集该标签之前的所有兄弟节点
before_content = []
for sibling in target_p.previous_siblings:
    # 将节点转为字符串,保留原始文本和标签结构
    before_content.append(str(sibling))

# 反转列表,恢复原始顺序
before_content.reverse()
# 拼接成最终结果
result = ''.join(before_content)

print(result)

代码说明:

  • 用lambda表达式作为find的参数,精准匹配内部包含的

    标签,这是定位目标的关键

  • previous_siblings会从目标标签往前遍历所有兄弟节点(顺序是倒序),所以需要用reverse()恢复原始顺序
  • 用str(sibling)而不是sibling.text,能完整保留文本和HTML标签结构,符合预期输出要求

你之前代码的问题:

  • 只通过soup.find('p')找第一个

    标签,没有限定该标签必须包含,定位错了目标

  • 用sibling.text只提取了文本内容,丢失了

    标签的结构,导致输出不符合预期

内容的提问来源于stack exchange,提问作者Rakesh Shetty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:25:29