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

如何使用BeautifulSoup提取两个span元素之间的文本

提取两个span元素之间的文本(BeautifulSoup实现)

针对你遇到的场景,这里提供两种实用的实现方法:

方法1:直接获取起始span的相邻文本节点

找到类为description_start的span后,使用next_sibling属性就能拿到它后面紧邻的文本节点,再用strip()清理多余的空格和换行符即可。

代码示例:

from bs4 import BeautifulSoup

html = '''
<span class="description_start"></span> 
需要提取的文本
<span class="description_end"></span>
'''

soup = BeautifulSoup(html, 'html.parser')
start_span = soup.find('span', class_='description_start')
# 提取并清理文本
target_text = start_span.next_sibling.strip()
print(target_text)  # 输出:需要提取的文本

方法2:通过父节点筛选文本(适用于复杂结构)

如果两个span处于同一个父节点下,且中间可能存在多个文本或无关节点,可以遍历父节点的所有子节点,定位起始和结束span的位置,再提取中间内容。

代码示例:

from bs4 import BeautifulSoup

html = '''
<div>
<span class="description_start"></span> 
需要提取的文本
<span class="description_end"></span>
</div>
'''

soup = BeautifulSoup(html, 'html.parser')
# 获取两个span的父节点
parent = soup.find('div')
contents = parent.contents
start_pos = end_pos = None

# 遍历子节点,标记两个span的位置
for index, node in enumerate(contents):
    if node.name == 'span' and node.get('class') == ['description_start']:
        start_pos = index
    elif node.name == 'span' and node.get('class') == ['description_end']:
        end_pos = index

# 提取中间的文本内容并清理
if start_pos is not None and end_pos is not None:
    target_text = ''.join([str(n).strip() for n in contents[start_pos+1:end_pos]]).strip()
    print(target_text)  # 输出:需要提取的文本

方法1适合结构简单的场景,代码简洁高效;方法2适配更复杂的页面结构,灵活性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:20:34