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

如何在BeautifulSoup中获取选中标签的下一个元素(含无标识场景)

关于BeautifulSoup获取相邻元素的问题解答

1. 如何在BeautifulSoup中获取选中标签的下一个标签(元素)?

首先得搞清楚BeautifulSoup里next_sibling和next_element的区别——这也是你之前拿到换行符或文本内容的核心原因:

  • next_element会直接跳到当前元素之后的第一个节点,包括文本节点(比如HTML里的换行、空格)
  • next_sibling找的是当前元素的同级兄弟节点,但同样可能碰到空白文本节点

要精准拿到下一个标签元素,有几个实用方法:

  • find_next_sibling():自动跳过空白文本,直接返回同级的下一个标签元素
  • 连续调用next_sibling两次(如果中间只有一个空白节点的话)
  • find_next():可以指定目标标签名,精准定位

举个简单示例:

# 假设soup是你的BeautifulSoup实例
target_tag = soup.find('span', class_='class1')
# 方法1:最稳妥的方式
next_tag = target_tag.find_next_sibling()
# 方法2:指定标签名更精准
next_tag = target_tag.find_next('p')
# 方法3:确定中间只有空白节点时可用
next_tag = target_tag.next_sibling.next_sibling

2. 选中上层标签后,如何获取它的下一个元素(针对你给出的HTML结构)

你的目标HTML结构是:

<div> 
  <span class="class1"> text </span> 
  <p> I want this text </p> 
</div>

你已经能选中<span class="class1">,现在要拿到后面<p>标签里的文本,直接用上面的方法就能解决,修正后的完整代码如下:

from bs4 import BeautifulSoup

data = BeautifulSoup(""" <div> <span class="class1"> text </span> <p> I want this text </p> </div> """, 'lxml')

# 方法1:找到同级下一个标签后取文本
desired_text = data.find('span', class_='class1').find_next_sibling().get_text(strip=True)
# 方法2:直接定位下一个p标签
desired_text = data.find('span', class_='class1').find_next('p').get_text(strip=True)
# 方法3:跳过空白节点的方式
desired_text = data.find('span', class_='class1').next_sibling.next_sibling.get_text(strip=True)

print(desired_text)  # 输出:I want this text

为什么你之前的代码没拿到预期结果?

  • 调用next_sibling时,首先碰到的是<span>标签后面的换行空白节点,所以返回'\n'
  • next_element会先跳到<span>内部的文本节点(就是text那部分),所以返回的是' text '

另外推荐用get_text(strip=True)获取文本,它会自动去掉前后的空白和换行,让结果更干净。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:44:12