import baostock as bs
import pandas as pd
# 登录 Baostock
lg = bs.login()
print(f'登录状态: {lg.error_msg}')
# 获取全量股票基础信息
rs = bs.query_stock_basic()
# 读取数据
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
# --------------------------
# 筛选条件:
# 1. A股 type=1
# 2. 未退市 outDate == ''
# --------------------------
a_stock = df[
(df['type'] == '1')
& (df['outDate'] == '') # 只保留未退市
].copy()
# --------------------------
# 拆分 code:sh.600000 → exchange=sh,code=600000
# --------------------------
a_stock[['exchange', 'code']] = a_stock['code'].str.split('.', expand=True)
# 最终需要的列
result = a_stock[['exchange', 'code', 'code_name', 'ipoDate']]
# 输出
print(f'✅ 当前正常上市 A 股总数:{len(result)}')
print(result.head(10))
# 导出 CSV
result.to_csv('A股正常上市股票.csv', index=False, encoding='utf-8-sig')
print('✅ 文件已保存:A股正常上市股票.csv')
bs.logout()
数据采集
from gp import GP
import pandas as pd
import time
gp=GP()
df=pd.read_csv('all.csv',dtype={'code':str})
for index,row in df.iterrows():
c=time.time()
df=gp.gupiao(row['exchange'],row['code'],days=180)
df.to_csv("csv/"+row['code']+".csv")
se=time.time()-c
if se<0.2:
time.sleep(0.2-se)
print("已完成",row['exchange'],row['code'],"耗时",time.time()-c)