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

如何用Python抓取交互式图表数据并导出为CSV?

解决方法

你之前的代码存在几个关键问题:

  • 用错了目标URL(你写的是fidelity的页面,不是crusaderpensions的)
  • 直接用xpath获取的元素对象无法直接写入CSV,需要提取实际数据
  • 没有正确定位到图表存储的数据来源

下面是可行的Python实现方案:

步骤说明

目标页面的图表数据是通过JavaScript动态加载的,实际数据存储在页面的脚本标签中,我们可以通过渲染页面后提取脚本中的JSON数据,再整理导出为CSV。

完整代码

from requests_html import HTMLSession
import json
from csv import DictWriter

# 正确的目标URL
url = 'https://crusaderpensions.com/services/fund-history/'

s = HTMLSession()
r = s.get(url)

# 渲染页面,等待JS加载完成
r.html.render(sleep=2)

# 查找包含基金历史数据的脚本标签
script_content = None
for script in r.html.find('script'):
    if 'fundHistoryData' in script.text:
        script_content = script.text
        break

if not script_content:
    print("未找到数据来源")
    exit()

# 提取JSON数据部分
# 从脚本中截取fundHistoryData对应的JSON字符串
start_idx = script_content.find('fundHistoryData = ') + len('fundHistoryData = ')
end_idx = script_content.find(';', start_idx)
json_str = script_content[start_idx:end_idx].strip()

# 解析JSON数据
fund_data = json.loads(json_str)

# 定义CSV字段
columns = ['Fund_Type', 'Valuation_Date', 'Unit Price']

# 写入CSV文件
with open('crusader_fund_history.csv', 'w', newline='', encoding='utf-8') as f:
    writer = DictWriter(f, fieldnames=columns)
    # 写入表头
    writer.writeheader()
    
    # 遍历每个基金的数据
    for fund_type, entries in fund_data.items():
        for entry in entries:
            # 整理成字典格式
            row = {
                'Fund_Type': fund_type,
                'Valuation_Date': entry['date'],
                'Unit Price': entry['price']
            }
            writer.writerow(row)

print("数据已成功导出到crusader_fund_history.csv")

代码说明

  1. 修正URL:使用你目标的crusaderpensions页面地址
  2. 渲染页面:通过r.html.render()等待JavaScript加载完成,确保能获取到动态生成的数据
  3. 提取脚本数据:遍历页面脚本,找到存储基金数据的fundHistoryData变量,截取并解析其JSON内容
  4. 整理并写入CSV:遍历解析后的基金数据,将每个条目整理为符合字段要求的字典,写入CSV文件,同时写入表头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:40:32