news 2026/4/23 12:56:17

大A数据采集教程-2历史数据采集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大A数据采集教程-2历史数据采集

创建存储表

1.股票基本信息表 stock_basic

-- ------------------------------ Table structure for stock_basic-- ----------------------------DROPTABLEIFEXISTS`stock_basic`;CREATETABLE`stock_basic`(`code`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLCOMMENT'股票代码(如:sh.600000)',`code_name`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLCOMMENT'股票名称',`exchange`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'交易所(sh:上海, sz:深圳)',`stock_type`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'股票类型(A股、B股等)',`status`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'上市状态(上市、退市等)',`list_date`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'上市日期',`delist_date`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'退市日期',`create_time`datetime(0)NULLDEFAULTCURRENT_TIMESTAMP(0)COMMENT'创建时间',`update_time`datetime(0)NULLDEFAULTCURRENT_TIMESTAMP(0)ONUPDATECURRENT_TIMESTAMP(0)COMMENT'更新时间',PRIMARYKEY(`code`)USINGBTREE)ENGINE=InnoDBCHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciCOMMENT='股票基本信息表'ROW_FORMAT=Compact;SETFOREIGN_KEY_CHECKS=1;

2.股票日线行情表 stock_quote_daily

-- ------------------------------ Table structure for stock_quote_daily-- ----------------------------DROPTABLEIFEXISTS`stock_quote_daily`;CREATETABLE`stock_quote_daily`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键ID',`code`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLCOMMENT'股票代码',`trade_date`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLCOMMENT'交易日期',`open`decimal(10,4)NULLDEFAULTNULLCOMMENT'开盘价',`high`decimal(10,4)NULLDEFAULTNULLCOMMENT'最高价',`low`decimal(10,4)NULLDEFAULTNULLCOMMENT'最低价',`close`decimal(10,4)NULLDEFAULTNULLCOMMENT'收盘价',`pre_close`decimal(10,4)NULLDEFAULTNULLCOMMENT'前收盘价',`change_amount`decimal(10,4)NULLDEFAULTNULLCOMMENT'涨跌额',`change_percent`decimal(10,4)NULLDEFAULTNULLCOMMENT'涨跌幅(%)',`volume`bigint(20)NULLDEFAULTNULLCOMMENT'成交量(股)',`amount`decimal(15,4)NULLDEFAULTNULLCOMMENT'成交额(元)',`adjustflag`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'复权类型(1:后复权, 2:前复权, 3:不复权)',`turn`decimal(10,4)NULLDEFAULTNULLCOMMENT'换手率(%)',`tradestatus`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULLCOMMENT'交易状态(1:正常交易, 0:停牌)',`pctChg`decimal(10,4)NULLDEFAULTNULLCOMMENT'涨跌幅(%)',`peTTM`decimal(15,4)NULLDEFAULTNULLCOMMENT'动态市盈率',`pbMRQ`decimal(15,4)NULLDEFAULTNULLCOMMENT'市净率',`psTTM`decimal(15,4)NULLDEFAULTNULLCOMMENT'市销率',`pcfNcfTTM`decimal(15,4)NULLDEFAULTNULLCOMMENT'市现率',`isST`tinyint(1)NULLDEFAULTNULLCOMMENT'是否ST股(1:是, 0:否)',`create_time`datetime(0)NULLDEFAULTCURRENT_TIMESTAMP(0)COMMENT'创建时间',`update_time`datetime(0)NULLDEFAULTCURRENT_TIMESTAMP(0)ONUPDATECURRENT_TIMESTAMP(0)COMMENT'更新时间',PRIMARYKEY(`id`)USINGBTREE,UNIQUEINDEX`idx_code_trade_date`(`code`,`trade_date`)USINGBTREECOMMENT'股票代码和交易日期的唯一索引')ENGINE=InnoDBAUTO_INCREMENT=1CHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciCOMMENT='股票日线行情表'ROW_FORMAT=Compact;

使用Baostock采集

创建采集脚本 get_data.py

importbaostockasbsimportpandasaspdfromsqlalchemyimportcreate_engineimporttimefromdatetimeimportdatetime# MySQL数据库配置MYSQL_CONFIG={'host':'49.235.159.43',# 数据库地址'port':3306,# 端口'user':'adata',# 用户名'password':'wb3BRaNtesdxfydA',# 密码'db':'adata',# 数据库名'charset':'utf8mb4'}# 初始化数据库连接engine=create_engine(f"mysql+pymysql://{MYSQL_CONFIG['user']}:{MYSQL_CONFIG['password']}@{MYSQL_CONFIG['host']}:{MYSQL_CONFIG['port']}/{MYSQL_CONFIG['db']}?charset={MYSQL_CONFIG['charset']}")definit_baostock():"""初始化Baostock连接"""lg=bs.login()iflg.error_code!='0':print(f"登录失败:{lg.error_msg}")returnFalseprint("Baostock登录成功")returnTruedefget_stock_basic():"""获取所有股票基本信息并存储到数据库"""# 查询A股所有股票rs=bs.query_stock_basic(code_name="")ifrs.error_code!='0':print(f"获取股票基本信息失败:{rs.error_msg}")returndata_list=[]while(rs.error_code=='0')&rs.next():data=rs.get_row_data()data_dict={'code':data[0],'code_name':data[1],'exchange':data[2],'stock_type':data[4],# 股票类型(A股、B股等)'status':'上市'ifdata[5]=='1'else'退市',# 上市状态'list_date':data[2],'delist_date':data[3]ifdata[3]elseNone}data_list.append(data_dict)# 转换为DataFrame并写入数据库df=pd.DataFrame(data_list)ifnotdf.empty:df.to_sql(name='stock_basic',con=engine,if_exists='append',index=False,chunksize=1000)print(f"成功写入{len(df)}条股票基本信息")defget_stock_daily_data(code,start_date='1990-12-19',end_date=None):"""获取单只股票的历史日线数据"""end_date=end_dateordatetime.now().strftime('%Y-%m-%d')rs=bs.query_history_k_data_plus(code=code,fields="date,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,""pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",start_date=start_date,end_date=end_date,frequency="d",adjustflag="2"# 2=前复权)ifrs.error_code!='0':print(f"获取{code}数据失败:{rs.error_msg}")returnNonedata_list=[]while(rs.error_code=='0')&rs.next():data=rs.get_row_data()data_dict={'code':code,'trade_date':data[0],'open':float(data[1])ifdata[1]elseNone,'high':float(data[2])ifdata[2]elseNone,'low':float(data[3])ifdata[3]elseNone,'close':float(data[4])ifdata[4]elseNone,'pre_close':float(data[5])ifdata[5]elseNone,'change_amount':round(float(data[4])-float(data[5]),4)ifdata[4]anddata[5]elseNone,'change_percent':float(data[11])ifdata[11]elseNone,'volume':int(data[6])ifdata[6]elseNone,'amount':float(data[7])ifdata[7]elseNone,'adjustflag':data[8],'turn':float(data[9])ifdata[9]elseNone,'tradestatus':data[10],'pctChg':float(data[11])ifdata[11]elseNone,'peTTM':float(data[12])ifdata[12]elseNone,'pbMRQ':float(data[13])ifdata[13]elseNone,'psTTM':float(data[14])ifdata[14]elseNone,'pcfNcfTTM':float(data[15])ifdata[15]elseNone,'isST':1ifdata[16]=='1'else0}data_list.append(data_dict)returnpd.DataFrame(data_list)ifdata_listelseNonedefbatch_get_daily_data():"""批量获取所有股票的日线数据"""# 从数据库读取已存在的股票代码query="SELECT code FROM stock_basic WHERE status = '上市'"codes=pd.read_sql(query,engine)['code'].tolist()print(f"共{len(codes)}只上市股票需要获取日线数据")fori,codeinenumerate(codes):print(f"正在处理第{i+1}/{len(codes)}只股票:{code}")# 查询该股票已存在的最新日期,避免重复抓取latest_date_query=f"SELECT MAX(trade_date) as latest FROM stock_quote_daily WHERE code = '{code}'"latest_date=pd.read_sql(latest_date_query,engine)['latest'].iloc[0]start_date=latest_dateiflatest_dateelse'1990-12-19'# 获取数据df=get_stock_daily_data(code,start_date=start_date)ifdfisnotNoneandnotdf.empty:# 写入数据库df.to_sql(name='stock_quote_daily',con=engine,if_exists='append',index=False,chunksize=1000)print(f"成功写入{len(df)}条日线数据")# 避免请求过于频繁time.sleep(1)if__name__=="__main__":ifinit_baostock():# 1. 获取股票基本信息#get_stock_basic()# 2. 获取日线行情数据batch_get_daily_data()# 登出Baostockbs.logout()print("数据获取完成并退出")

执行采集

python get_data.py

等代码执行完毕,恭喜你获得了一份大A 基本信息和历史日数据的数据

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:52:25

腾讯混元开源HunyuanVideo-Foley:端到端视频音效生成新突破

腾讯混元开源HunyuanVideo-Foley:端到端视频音效生成新突破 在影视制作的幕后,拟音师曾是一个神秘而不可或缺的角色——他们用砂纸摩擦木板模拟脚步声,用卷心菜掰断制造骨骼断裂的声响。这种高度依赖经验与手工技艺的声音设计,至今…

作者头像 李华
网站建设 2026/4/23 11:26:48

2026年河北省职业院校技能大赛“应用软件系统开发“赛项赛题

2026年河北省职业院校技能大赛"应用软件系统开发"赛项赛题 文章目录2026年河北省职业院校技能大赛"应用软件系统开发"赛项赛题模块一:系统需求分析任务1:智能仓储WMS—入库申请任务2:智能仓储WMS—补货申请任务3&#xf…

作者头像 李华
网站建设 2026/4/23 11:29:03

告别专业软件依赖!浩辰CAD看图王让STP看图更轻量化

在工业设计领域,查看 STP 格式3D模型往往需要依赖大型专业CAD软件,这类软件不仅安装包体积庞大、对电脑配置要求高,还需要用户掌握复杂的操作技巧,对新手和移动办公用户极不友好。而浩辰CAD看图王以轻量化的定位,打破了…

作者头像 李华
网站建设 2026/4/23 11:29:02

使用poi通过word模板导出数据

引入Apache POI依赖 制作word模板 加载word模板,读取word模板的内容,替换占位符内容 将修改后文档另存为 一、基础示例 1. 引入依赖 在POM文件中引入相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId>&…

作者头像 李华
网站建设 2026/4/23 11:57:06

LobeChat的API接口文档在哪里?开发者最关心的问题

LobeChat 的 API 接口在哪里&#xff1f;开发者如何与它“对话” 在如今这个大模型遍地开花的时代&#xff0c;越来越多的开发者不再满足于仅仅使用现成的 AI 聊天界面。他们更希望把强大的语言能力嵌入到自己的系统中——比如企业内部的知识助手、自动化客服流程&#xff0c;或…

作者头像 李华
网站建设 2026/4/23 11:56:59

消费级GPU微调210亿参数GPT-20b全指南

消费级GPU微调210亿参数GPT-20b全指南&#xff1a;从零部署到高效训练 你有没有试过在自己的笔记本上跑一个210亿参数的大模型&#xff1f;不是推理&#xff0c;是微调——而且用的还是RTX 3060这种“老将”级别的显卡。听起来像天方夜谭&#xff1f;但随着 GPT-OSS-20B 的发布…

作者头像 李华