如何修改Python脚本提取CNN恐惧与贪婪指数历史图表数据?
解决CNN恐惧与贪婪指数历史数据提取问题
问题分析
原脚本失效的核心原因是网页结构已更新,不再使用Highcharts渲染图表,目标数据现在嵌入在页面的window.__INITIAL_STATE__全局对象中,而非原代码预期的Highcharts相关script标签。
修改后的代码方案
import requests import json from bs4 import BeautifulSoup url = 'https://www.cnn.com/markets/fear-and-greed' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 定位包含全局状态数据的script标签 script_tag = soup.find('script', string=lambda t: t and 'window.__INITIAL_STATE__' in t) # 提取并解析JSON数据 raw_data = script_tag.string.split('window.__INITIAL_STATE__ = ')[1].split(';')[0] state_data = json.loads(raw_data) # 提取恐惧与贪婪指数的历史数据点 fear_greed_history = state_data['fearGreed']['historical'] # 整理成日期-指数值的结构化列表 formatted_data = [{"date": item['date'], "value": item['value']} for item in fear_greed_history] # 打印结果(可根据需求保存为CSV/Excel等格式) for entry in formatted_data: print(f"日期: {entry['date']}, 恐惧贪婪指数: {entry['value']}")
代码说明
- 定位数据载体:通过匹配
window.__INITIAL_STATE__关键字找到存储所有页面初始化数据的script标签,这是当前页面数据的核心来源。 - 解析JSON结构:从script内容中剥离出JSON字符串并解析为Python字典,方便后续提取目标字段。
- 提取目标数据:在解析后的字典中,
fearGreed.historical路径下直接存储了所有历史数据点,包含日期和对应指数值。 - 结构化输出:将原始数据整理为易读的键值对格式,可直接用于后续EPS预测模型的数据分析,也可通过
pandas库导出为CSV文件(需额外安装pandas)。
扩展建议
如果需要定期获取数据,可添加:
- 请求头伪装(如添加
User-Agent),避免被网站反爬机制拦截 - 定时任务逻辑(如使用
schedule库)实现自动数据采集 - 数据持久化逻辑,将结果写入数据库或本地文件
内容的提问来源于stack exchange,提问作者arabiccamel
相关产品推荐
相关产品推荐

