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

Python使用BeautifulSoup提取嵌套HTML标签指定td值的方法

代码问题说明
  • 第一版代码错误:select_one 是CSS选择器方法,不支持传入第二个字典参数做属性过滤,soup.select_one("tfoot", {"class": "ctr2"}) 实际只会匹配页面第一个 <tfoot> 标签,你写的class筛选参数完全没有生效,所以会返回整个tfoot块的全部内容。
  • 第二版代码存在两个问题:
    • 直接打印匹配到的标签对象,只会输出标签本身的HTML结构,没有调用BeautifulSoup标签对象的文本提取属性,所以拿不到标签内部的文本值。
    • 选择器td[class="ctr2"]会匹配整个页面第一个class为ctr2的td标签,也就是<thead>里内容为Value.的单元格,不是你要找的tfoot下值为12%的目标单元格。
提取12%目标值的正确实现

定位到目标标签对象后,调用.text属性(或.get_text()方法)即可获取标签内部文本,搭配.strip()可以清除文本前后多余的换行、空格。精准定位目标值的代码如下:

from bs4 import BeautifulSoup

with open('index.html', 'r') as f:
    contents = f.read()
    soup = BeautifulSoup(contents, 'lxml')
    # 匹配tfoot下第一个class为ctr2的td标签,避免匹配到thead里的同名class单元格
    target_tag = soup.select_one('tfoot td.ctr2')
    target_value = target_tag.text.strip()
    print(target_value)
    # 输出结果:12%
提取所有td标签内值的方法

使用select()方法可以拿到符合选择器规则的所有标签列表,遍历列表逐个提取文本即可,根据需求可以选择不同的匹配范围:

# 场景1:提取整个页面所有td标签的文本
all_td_tags = soup.select('td')
all_td_values = [tag.text.strip() for tag in all_td_tags]
print(all_td_values)

# 场景2:仅提取tfoot汇总行内所有td的文本
tfoot_td_tags = soup.select('tfoot td')
tfoot_values = [tag.text.strip() for tag in tfoot_td_tags]
print(tfoot_values)
# 输出结果:['Total', '2323', '12%', '233', '61%', '222', '322', '233', '455']

*补充说明:CSS选择器中用td.ctr2的写法匹配class为ctr2的td,比td[class="ctr2"]兼容性更好,当标签存在多个class值时也能正常匹配,不会出现匹配遗漏的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:30:46