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

如何使用BeautifulSoup提取含指定class的i标签的span文本?

提取包含class="aaa"的标签的文本解决方案

方法1:通过目标标签反向定位父

直接找到所有class为aaa的<i>标签,再获取它们的父元素<span>的文本:

from bs4 import BeautifulSoup

src = '''
<div class="row info">
<span><i class="aaa"></i>time 1</span>
<span><i class="bbb"></i>place 1</span>
<span><i class="ccc"></i>spot 1</span>
</div>, 
<div class="row info">
<span><i class="aaa"></i>time 2</span>
<span><i class="bbb"></i>place 2</span>
<span><i class="ccc"></i>spot 2</span>
</div>,
<div class="row info">
<span><i class="aaa"></i>time 3</span>
<span><i class="bbb"></i>place 3</span>
<span><i class="ccc"></i>spot 3</span>
'''

soup = BeautifulSoup(src, 'html.parser')
# 定位所有class为aaa的i标签
target_i_tags = soup.find_all('i', class_='aaa')
for i_tag in target_i_tags:
    # 获取父span的文本,strip()去除多余空白字符
    print(i_tag.parent.text.strip())

方法2:使用CSS选择器直接定位目标

如果使用lxml解析器(需提前安装:pip install lxml),可以用:has选择器直接筛选包含<i class="aaa">的<span>:

from bs4 import BeautifulSoup

soup = BeautifulSoup(src, 'lxml')
# 用CSS选择器直接匹配包含i.aaa的span
time_spans = soup.select('span:has(i.aaa)')
for span in time_spans:
    print(span.text.strip())

若使用默认的html.parser,可通过子元素选择器定位后反向找父元素:

time_spans = soup.select('span > i.aaa')
for i_tag in time_spans:
    print(i_tag.parent.text.strip())

方法3:遍历所有并筛选符合条件的元素

在你原有代码基础上,增加判断逻辑,检查每个<span>内部是否存在class为aaa的<i>标签:

from bs4 import BeautifulSoup

soup = BeautifulSoup(src, 'html.parser')
all_spans = soup.find_all('span')
for span in all_spans:
    # 判断当前span是否包含class为aaa的i标签
    if span.find('i', class_='aaa'):
        print(span.text.strip())

以上三种方法都能输出目标内容:time 1、time 2、time 3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:12:46