
在量化投资和金融数据分析中,高效获取股票市场数据是基础且关键的一步。使用Python的 baostock 库和 pandas 库,自动化获取A股市场所有股票的历史行情数据,并将结果保存到Excel文件中。
先安装以下Python库:
通过pip安装:
pip install baostock pandas openpyxl1、登录Baostock系统:建立数据连接。
2、获取A股股票列表:筛选出上海和深圳交易所的股票。
3、逐只下载历史行情数据:包括开盘价、收盘价、成交量等关键指标。
4、合并数据并导出到Excel:使用pandas进行数据整合和保存。
如下完整的Python脚本示例,实现了上述功能。
import baostock as bs
import pandas as pd
from datetime import datetime, timedelta
def fetch_a_stock_data_to_excel():
"""
获取A股所有股票的历史行情数据并保存到Excel文件
"""
# 步骤1: 登录Baostock系统
login_result = bs.login()
if login_result.error_code != '0':
print(f"登录失败: 错误代码 {login_result.error_code}, 错误信息 {login_result.error_msg}")
return
print("Baostock登录成功")
# 设置日期范围:获取最近30天的数据,也可以使用自定义时间
end_date = datetime.now().strftime("%Y-%m-%d")
start_date = (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%d")
# 步骤2: 获取股票代码列表(仅A股)
stock_code_list = []
rs_codes = bs.query_all_stock(day=end_date)
if rs_codes.error_code != '0':
print(f"获取股票列表失败: {rs_codes.error_msg}")
bs.logout()
return
while rs_codes.next():
code_data = rs_codes.get_row_data()
# 筛选A股股票(上交所和深交所)
if code_data[0].startswith(('sh.', 'sz.')):
stock_code_list.append(code_data[0])
print(f"共识别到 {len(stock_code_list)} 只A股股票")
# 步骤3: 遍历每只股票,获取历史K线数据
all_data_frames = []
for idx, stock_code in enumerate(stock_code_list):
print(f"正在处理第 {idx+1}/{len(stock_code_list)} 只股票: {stock_code}")
# 查询历史行情数据
rs_data = bs.query_history_k_data_plus(
code=stock_code,
fields="date,code,open,high,low,close,volume,amount",
start_date=start_date,
end_date=end_date,
frequency="d", # 日线数据
adjustflag="3" # 不复权
)
if rs_data.error_code != '0':
print(f"获取 {stock_code} 数据失败: {rs_data.error_msg}")
continue
# 将数据转换为DataFrame
data_list = []
while rs_data.next():
data_list.append(rs_data.get_row_data())
if data_list:
df_temp = pd.DataFrame(data_list, columns=rs_data.fields)
all_data_frames.append(df_temp)
# 步骤4: 合并所有数据并导出
if all_data_frames:
final_df = pd.concat(all_data_frames, ignore_index=True)
# 对数值列进行类型转换
numeric_columns = ['open', 'high', 'low', 'close', 'volume', 'amount']
for col in numeric_columns:
final_df[col] = pd.to_numeric(final_df[col], errors='coerce')
# 保存到Excel文件
output_filename = f"A股股票数据_{end_date}.xlsx"
final_df.to_excel(output_filename, index=False, engine='openpyxl')
print(f"数据已成功导出到 {output_filename}")
print(f"数据概览:\n{final_df.head()}")
else:
print("未获取到有效数据")
# 退出系统
bs.logout()
print("程序执行完毕")
if __name__ == "__main__":
fetch_a_stock_data_to_excel()1、日期范围设置:代码自动计算最近30天的数据范围,确保数据时效性。
2、数据字段扩展:基础价格和成交量等。
3、错误处理:在每个API调用后检查错误码,避免程序因单个股票失败而中断。
4、数据类型优化:使用pd.to_numeric()确保数值列的正确类型,便于后续分析。
5、动态文件名:Excel文件名包含导出日期,便于区分不同批次的数据。
运行结果:


通过上述代码可以自动化完成A股市场全量股票数据的获取和导出。此方法高效、可靠,适用于量化回测、市场监控等场景。可以根据需求调整日期范围、数据字段或输出格式。
“无他,惟手熟尔”!有需要的用起来!更多Python阅读在首页。
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!