如何用Python从雅虎财经抓取Sustainalytics提供的历史ESG数据
方案核心前提说明
首先明确你遇到问题的根本原因:现有代码调用的yfinance.Ticker.sustainability方法,底层仅对接雅虎财经前端展示的当期最新Sustainalytics ESG评分,本身没有支持传入历史时间范围的参数通道,不管怎么调整遍历逻辑,都只能拿到最新时点的数值,无法回溯2010-2020年的历史评分。雅虎未对普通访问者开放Sustainalytics历史数据的现成SDK接口,需要通过适配前端历史数据的加载逻辑实现抓取,而非依赖原有sustainability属性的能力。
可落地实现流程
1. 抓取逻辑替换
放弃原有仅能获取最新值的sustainability调用逻辑,直接在请求中传入2010-01-01至2020-12-31的时间范围参数,对应抓取该区间内的Sustainalytics历史评分序列。
- 优先匹配月度粒度要求:如果请求返回的原始数据频率高于月度,自动提取每个自然月最后一个交易日的评分值,对齐月度统计要求
- 适配次选粒度要求:如果原始接口仅支持年度粒度,自动提取每年12月末的评分值,满足年度维度的分析需求
2. 批量抓取框架改造
基于你已有的标普500成分股遍历框架做针对性修改:
- 替换原来的
DataFrame.append()写法(该方法在pandas 2.0+版本已被移除,会直接触发运行报错),改用列表收集每个标的的返回数据,最后统一拼接成完整数据集,避免报错同时提升批量处理速度 - 增加基础反爬适配:每个标的的请求间隔设置为0.5-1秒,避免触发雅虎的访问频率限制
- 完善异常捕获逻辑:遇到无有效ESG历史数据的标的、接口返回空值的情况,直接跳过当前标的,不中断整体抓取流程
- 修正现有代码的语法错误:原单标的代码中
str(msft_y ticker)漏写了点号,正确写法为str(msft_y.ticker)
3. 数据自动落盘
抓取流程完成后,将整合后的数据集直接保存为本地文件:
- 默认导出为csv格式,使用
DataFrame.to_csv()方法指定保存路径即可 - 若需要txt格式,可通过修改导出参数,设置为制表符分隔的文本文件;导出字段包含股票代码、对应统计周期、ESG总评分、环境分项评分、社会分项评分、治理分项评分、对应风险评级,完全匹配后续构建ESG多空组合、做历史周期股价回测的字段需求。
内容的提问来源于stack exchange,提问作者pinpss
相关产品推荐
相关产品推荐

