使用VBA从Yahoo Finance获取全球全量股票数据的方法
从Yahoo Finance批量获取全球股票数据并导入Excel的自动化方案
一、先解决「全球股票代码列表」的问题
Yahoo Finance没有直接提供全量股票代码的接口,你需要先获取覆盖全球主要交易所的股票代码集合:
- 从公开数据集获取:下载包含全球股票代码的CSV文件(需选择带交易所后缀的版本,比如美股
AAPL、港股00700.HK、A股600000.SS),这类合规的免费资源可在开源平台找到。 - 批量整理交易所公开数据:针对纽交所、纳斯达克、港交所、上交所等全球主要交易所,从其官网公开的上市股票列表中提取代码,整理成统一格式的清单(需遵守各交易所的爬虫规则)。
二、用Python实现自动化数据抓取与Excel导出
Python的yfinance库是对接Yahoo Finance的高效工具,配合pandas可快速处理数据并导出到Excel。
步骤1:安装依赖库
打开命令提示符执行以下命令:
pip install yfinance pandas openpyxl
步骤2:编写自动化脚本
以下是核心代码示例,包含代码遍历、数据抓取、异常处理和Excel导出:
import yfinance as yf import pandas as pd import time # 读取预先准备的全球股票代码列表(假设文件名为global_tickers.csv,列名'ticker') tickers_df = pd.read_csv('global_tickers.csv') ticker_list = tickers_df['ticker'].tolist() stock_data = [] # 遍历代码抓取数据,添加延迟避免触发Yahoo限制 for ticker in ticker_list: try: stock = yf.Ticker(ticker) info = stock.info # 提取所需字段(可根据需求调整) row = { '股票代码(Ticker)': ticker, '公司名称': info.get('longName', '无数据'), '当前股价': info.get('currentPrice', '无数据'), '市值': info.get('marketCap', '无数据'), '行业': info.get('industry', '无数据'), '交易所': info.get('exchange', '无数据') } stock_data.append(row) print(f"已获取 {ticker} 的数据") time.sleep(1) # 每秒请求一次,规避限流 except Exception as e: print(f"获取 {ticker} 数据失败: {str(e)}") continue # 转换为DataFrame并导出到Excel result_df = pd.DataFrame(stock_data) result_df.to_excel('全球股票数据.xlsx', index=False, engine='openpyxl') print("数据已成功导出到Excel")
步骤3:运行脚本
- 将准备好的股票代码列表保存为
global_tickers.csv,和脚本放在同一目录。 - 运行脚本,等待执行完成后,打开生成的
全球股票数据.xlsx即可查看结果。
三、关键注意事项
- 请求限流:Yahoo Finance对请求频率有严格限制,必须添加1秒以上的延迟,否则可能被临时封禁IP。
- 无效代码处理:脚本中的异常处理会跳过退市、无效的代码,避免流程中断。
- 字段自定义:可根据需求修改
row字典中的字段,比如添加市盈率、成交量等,参考yfinance官方文档的info字段说明。 - 合规性:爬取交易所数据时,需遵守各平台的robots协议和使用条款,避免违规操作。
内容的提问来源于stack exchange,提问作者Zaiga
相关产品推荐
相关产品推荐

