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

如何使用Python提取class属性动态变化的div标签中的数据

最优解决方案

你原来通过固定的data-section-tag属性定位父容器的思路是对的,完全不需要依赖动态生成的class值,有两种比字符串切割稳定得多的提取方式:

方案1:遍历父容器下的指标节点提取键值对

这类指标卡片的内部结构都是每个指标对应独立的子节点,你可以直接遍历所有子节点把指标名和对应值整理成字典,后续取值直接查字典即可,不会受指标顺序调整、文本格式变动的影响。
示例代码:

from bs4 import BeautifulSoup as bs
import requests

s = requests.Session()
response = s.get('https://www.tickertape.in/etfs/kotak-nifty-50-etf-KOTK')
soup = bs(response.text, 'html.parser')
# 还是用固定的data属性定位父容器
metrics_container = soup.find("div", {"data-section-tag": "key-metrics"})

metrics_dict = {}
# 遍历容器下所有直接子节点,过滤空节点
for item in metrics_container.children:
    if item.name == 'div': # 每个指标项都是div节点
        # 清理文本里的换行、多余空格
        text = item.get_text(strip=True).replace('\n', ' ')
        # 拆分指标名和值,比如"AUM ₹1,234 Cr"拆成键AUM,值₹1,234 Cr
        for key in ['AUM', 'Expense Ratio', 'Tracking Error']:
            if text.startswith(key):
                metrics_dict[key] = text[len(key):].strip()
                break

# 直接从字典取值即可
print("The AUM value", metrics_dict.get('AUM', ''))
print("The Expense ratio", metrics_dict.get('Expense Ratio', ''))
print("The Tracking Error", metrics_dict.get('Tracking Error', ''))

s.close()

方案2:提取页面内嵌的初始JSON数据(最稳定)

该网站是React开发的,页面加载时会把所有初始数据放在<script>标签的全局变量里,完全不需要解析HTML,直接提取JSON解析取值即可,不受前端渲染结构、class值、指标展示顺序的任何影响。
示例代码:

import requests
import json
import re

s = requests.Session()
response = s.get('https://www.tickertape.in/etfs/kotak-nifty-50-etf-KOTK')
# 正则匹配初始数据
raw_data = re.search(r'window\.__INITIAL_STATE__ = (.*?);</script>', response.text).group(1)
json_data = json.loads(raw_data)

# 直接从JSON结构里取对应字段即可,路径可以自己在浏览器控制台打印__INITIAL_STATE__查找
aum = json_data['etf']['detail']['aum']
expense_ratio = json_data['etf']['detail']['expenseRatio']
tracking_error = json_data['etf']['detail']['trackingError']

print("The AUM value", f"₹{aum} Cr")
print("The Expense ratio", f"{expense_ratio}%")
print("The Tracking Error", f"{tracking_error}%")

s.close()

方案对比

  • 原字符串切割方案:只要网站调整指标顺序、新增中间指标就会完全失效,稳定性极差
  • 方案1:不受动态class影响,只要指标名不变就可以正常提取,稳定性中等
  • 方案2:直接取后台返回的原始数据,只要接口字段不变就不受任何前端改动影响,稳定性最高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:57:02