参考链接:
baostock模块:www.baostock.com
获取沪深300历史成分股:https://zhuanlan.zhihu.com/p/639250910
(网上只有少部分成分股名单资源,且价格不低,所以自己动手)。
代码拔取从start_year到end_year的沪深300历史成分股信息,以半年为单位,最后以file_name为路径和文件名保存。
代码:
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)
start_year = 2006
end_year = 2023
file_name = "G:/hs300_stocks.csv" #文件路径和文件名
keep_index = True
hs300_stocks = []
for i in range(start_year, end_year + 1):
date1 = str(i)+'-01-31' # 获取沪深300成分股, 上半年
rs1 = bs.query_hs300_stocks(date1)
#print('query_hs300 error_code:'+rs1.error_code)
#print('query_hs300 error_msg:'+rs1.error_msg)
while (rs1.error_code == '0') & rs1.next(): # 获取一条记录,将记录合并在一起
hs300_stocks.append(rs1.get_row_data())
date2 = str(i)+'-07-31' # 获取沪深300成分股, 下半年
rs2 = bs.query_hs300_stocks(date2)
#print('query_hs300 error_code:'+rs2.error_code)
#print('query_hs300 error_msg:'+rs2.error_msg)
while (rs2.error_code == '0') & rs2.next(): # 获取一条记录,将记录合并在一起
hs300_stocks.append(rs2.get_row_data())
result = pd.DataFrame(hs300_stocks, columns=rs1.fields)# 结果集输出到csv文件
result.to_csv(file_name, encoding="gbk", index=False)
#print(result)# 登出系统
bs.logout()