如何在Python中从列表批量导入股票数据至Alpha Vantage
批量获取股票日度数据的解决方案
下面提供两种批量处理的实现方式,适配你的需求:
一、直接使用内置股票列表
如果股票代码数量不多,可以直接在代码里定义列表,循环遍历获取数据:
import pandas as pd from alpha_vantage.timeseries import TimeSeries import time api_key = 'QLIFIFQWRVWXRA4U' # 定义需要查询的股票代码列表 stock_list = ['MSFT', 'F', 'GM', 'BROS'] ts = TimeSeries(key=api_key, output_format='pandas') for stock in stock_list: print(f"正在获取 {stock} 的日度数据...") try: # 获取单只股票数据 data, meta_data = ts.get_daily(symbol=stock, outputsize='compact') # 将数据保存为CSV文件(可选,替换成你需要的存储方式) data.to_csv(f"{stock}_daily_data.csv") print(f"{stock} 数据获取完成,已保存到本地文件") # Alpha Vantage免费版有调用频率限制(5次/分钟),添加延迟避免触发限制 time.sleep(15) except Exception as e: print(f"获取 {stock} 数据失败:{str(e)}") time.sleep(15)
二、从本地文件读取股票代码
如果股票代码较多,建议将代码存到文件中,再读取到列表里处理:
方式1:读取TXT文件(每行一个股票代码)
假设你有一个stock_codes.txt文件,内容格式如下:
MSFT F GM BROS
对应的代码实现:
import pandas as pd from alpha_vantage.timeseries import TimeSeries import time api_key = 'QLIFIFQWRVWXRA4U' ts = TimeSeries(key=api_key, output_format='pandas') # 读取TXT文件中的股票代码,自动过滤空行 with open('stock_codes.txt', 'r', encoding='utf-8') as f: stock_list = [line.strip() for line in f if line.strip()] # 循环处理每只股票 for stock in stock_list: print(f"正在获取 {stock} 的日度数据...") try: data, meta_data = ts.get_daily(symbol=stock, outputsize='compact') data.to_csv(f"{stock}_daily_data.csv") print(f"{stock} 数据处理完成") time.sleep(15) except Exception as e: print(f"{stock} 数据获取失败:{str(e)}") time.sleep(15)
方式2:读取CSV文件(适合带其他信息的股票列表)
如果你的股票代码存在CSV文件中(比如有一列名为symbol),可以用Pandas读取:
import pandas as pd from alpha_vantage.timeseries import TimeSeries import time api_key = 'QLIFIFQWRVWXRA4U' ts = TimeSeries(key=api_key, output_format='pandas') # 读取CSV文件中的symbol列 stock_df = pd.read_csv('stock_codes.csv') stock_list = stock_df['symbol'].tolist() # 循环处理逻辑和上面一致 for stock in stock_list: print(f"正在获取 {stock} 的日度数据...") try: data, meta_data = ts.get_daily(symbol=stock, outputsize='compact') data.to_csv(f"{stock}_daily_data.csv") print(f"{stock} 数据处理完成") time.sleep(15) except Exception as e: print(f"{stock} 数据获取失败:{str(e)}") time.sleep(15)
关键注意事项
- 调用频率限制:Alpha Vantage免费版限制每分钟最多5次请求,所以必须添加
time.sleep(15)来控制请求间隔,避免被限流。 - 异常处理:加入
try-except块可以防止单只股票请求失败导致整个程序中断,同时能打印错误信息排查问题。 - 数据存储:示例中把数据保存为CSV文件,你也可以根据需求改成存入数据库或合并成一个大文件。
内容的提问来源于stack exchange,提问作者Shawn Duffy
相关产品推荐
相关产品推荐

