Baostock 测试 · 沪深300成分股
简介 —— 这段 Python 脚本使用 baostock 免费证券数据接口,登录后查询沪深300指数的最新成分股列表,并将结果保存为 CSV 文件。代码涵盖了登录、查询、遍历结果集、DataFrame 构建、CSV 导出、登出等完整流程,非常适合作为 A 股量化数据获取的入门模板。
1. 导入所需库
两个核心库:Baostock 数据接口与 Pandas 数据处理。
import baostock as bs
import pandas as pd
- baostock — 免费开源的证券数据平台,提供 A 股历史行情、成分股等数据
- pandas — 将结果集转为 DataFrame 并导出 CSV
2. 登陆 Baostock 系统
说明 — 使用 Baostock 任何接口前必须先 login(),返回对象包含 error_code 与 error_msg。
# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)
- error_code == '0' 表示登录成功
- 若失败,error_msg 会给出原因
3. 查询沪深300成分股
# 获取沪深300成分股
rs = bs.query_hs300_stocks()
print('query_hs300 error_code:' + rs.error_code)
print('query_hs300 error_msg:' + rs.error_msg)
query_hs300_stocks() 返回一个结果集对象,需要逐行读取。
4. 遍历结果集并构建 DataFrame
使用 while 循环配合 rs.next() 逐行读取,rs.get_row_data() 获取当前行数据。
# 打印结果集
hs300_stocks = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
hs300_stocks.append(rs.get_row_data())
result = pd.DataFrame(hs300_stocks, columns=rs.fields)
- rs.error_code == '0' 确保查询无错
- rs.next() 移动到下一行,返回 True/False
- rs.fields 提供列名(如 code、code_name 等)
5. 保存 CSV & 打印结果
# 结果集输出到csv文件
result.to_csv("hs300_stocks.csv",index=False)
print(result)
提示 — index=False 避免将 DataFrame 索引写入 CSV,保持文件整洁。
6. 登出系统
# 登出系统
bs.logout()
良好的编程习惯:使用完毕后主动登出,释放连接资源。
完整代码
import baostock as bs
import pandas as pd
# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)
# 获取沪深300成分股
rs = bs.query_hs300_stocks()
print('query_hs300 error_code:' + rs.error_code)
print('query_hs300 error_msg:' + rs.error_msg)
# 打印结果集
hs300_stocks = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
hs300_stocks.append(rs.get_row_data())
result = pd.DataFrame(hs300_stocks, columns=rs.fields)
# 结果集输出到csv文件
result.to_csv("hs300_stocks.csv",index=False)
print(result)
# 登出系统
bs.logout()
关键点总结
bs.login() 必须先登录
query_hs300_stocks() 获取成分股
rs.next() 逐行遍历
rs.fields 作为列名
保存为 hs300_stocks.csv
bs.logout() 释放资源