首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 自动化获取A股市场所有股票信息并导出到Excel中保存

Python 自动化获取A股市场所有股票信息并导出到Excel中保存

作者头像
用户11081884
发布2026-07-20 18:51:44
发布2026-07-20 18:51:44
140
举报

在量化投资和金融数据分析中,高效获取股票市场数据是基础且关键的一步。使用Pythonbaostock 库和 pandas 库,自动化获取A股市场所有股票的历史行情数据,并将结果保存到Excel文件中。

所需工具和库

先安装以下Python库:

  • baostock :免费、开源的证券数据平台库,提供丰富的A股数据。
  • pandas :用于数据处理和分析。
  • openpyxl xlswriter :支持Excel文件输出。

通过pip安装:

代码语言:javascript
复制
pip install baostock pandas openpyxl

实现步骤

1、登录Baostock系统:建立数据连接。

2、获取A股股票列表:筛选出上海和深圳交易所的股票。

3、逐只下载历史行情数据:包括开盘价、收盘价、成交量等关键指标。

4、合并数据并导出到Excel:使用pandas进行数据整合和保存。

如下完整的Python脚本示例,实现了上述功能。

代码示例(获取最近30天的A股股票数据)

代码语言:javascript
复制
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阅读在首页

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 所需工具和库
  • 实现步骤
  • 代码示例(获取最近30天的A股股票数据)
  • 代码解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档