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

使用BeautifulSoup提取span标签数据时出现错误,如何提取指定百分比内容?

解决BeautifulSoup提取span文本的问题

看起来你遇到的问题主要是两点:一是没法获取所有目标数据,二是因为span标签里嵌套了子元素和注释,导致.string无法正确提取完整文本。咱们一步步来修正:

问题出在哪?

  1. page_content.td只会获取第一个<td>标签,所以你只能拿到第一个百分比,没法获取第二个。
  2. content = page_content.td.contents得到的是td的子节点列表,你直接调用content.span.string是错误的——列表没有.span属性。就算你取列表里的元素(比如content[0].string),因为这个span里面还有子span(<span class="icon-Caret-down"></span>)和HTML注释,.string会返回None(只有当标签下只有一个文本节点时,.string才会返回文本)。

正确的提取代码

我们可以直接定位到带指定class的span标签,然后用.get_text()来提取所有文本内容(它会自动忽略子标签和注释,把所有文本拼接起来):

from bs4 import BeautifulSoup

# 你的目标HTML
html = '''<td style="text-align:right"><span class="sc-15yy2pl-0 hzgCfk"><span class="icon-Caret-down"></span>3.69<!-- -->%</span></td> <td style="text-align:right"><span class="sc-15yy2pl-0 hzgCfk"><span class="icon-Caret-down"></span>5.33<!-- -->%</span></td>'''

page_content = BeautifulSoup(html, 'html.parser')

# 找到所有带有目标class的span标签
target_spans = page_content.find_all('span', class_='sc-15yy2pl-0 hzgCfk')

# 遍历提取文本
results = []
for span in target_spans:
    # get_text(strip=True)会自动去掉多余的空白字符
    percentage = span.get_text(strip=True)
    results.append(percentage)

print(results)  # 输出: ['3.69%', '5.33%']

另一种思路:先找td再找span

如果你想先定位td标签再提取里面的span,也可以这么写:

tds = page_content.find_all('td', style='text-align:right')
results = []
for td in tds:
    # 在每个td里找到目标span
    span = td.find('span', class_='sc-15yy2pl-0 hzgCfk')
    if span:
        results.append(span.get_text(strip=True))

print(results)

这样就能完美提取出你想要的3.69%和5.33%了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:32:32