使用baostock(证券宝)获取金融数据
产品介绍
证券宝是一个免费、开源的证券数据平台,提供大量准确、完整的证券历史行情数据、上市公司财务数据等。
通过python API获取证券数据信12息,返回的数据格式:Pandas DataFrame类型,支持通过自定义的数据存储功能,将数据全部保存到本地后进行分析。目前只支持Python3.5及以上(暂不支持Python 2.x版本)。
安装使用
软件安装
pip install baostock
登入和登出
代码示例:
import baostock as bs
#### 登陆系统 ####
login = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+login.error_code)
print('login respond error_msg:'+login.error_msg)
#### 登出系统 ####
logout = bs.logout()
# 显示登出返回信息
print('logout respond error_code:'+logout.error_code)
print('logout respond error_msg:'+logout.error_msg)
数据获取
以获取沪深300成分股为例,具体实现代码如下:
import baostock as bs
import pandas as pd
from sqlalchemy import create_engine
# 登陆系统
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文件
def export_to_csv():
result.to_csv("E:/hs300_stocks.csv", encoding="gbk", index=True)
# 结果集输出到Excel文件
def export_to_xlsx():
result.to_excel("E:/hs300_stocks.xlsx", encoding="gbk", index=True)
# 结果集输出到xlsx文件
def export_to_json():
result.to_json("E:/hs300_stocks.json")
# 结果集导出到Markdown文件
def export_to_md():
result.to_markdown("E:/hs300_stocks.md")
# 结果集导入到MySql数据库
def export_to_msql():
connection = create_engine('mysql+pymysql://root:root@localhost:3306/data')
con = connection.connect()
'''
if_exists 参数用于当目标表已经存在时的处理方式默认是 fail,即目标表存在就失败,另外两个选项是 replace 表示替代原表,即删除再创建,append 选项仅添加数据。使用 append 可以达到要求。
'''
result.to_sql(name="stock", con=con, if_exists='append', index=True)
def main():
export_to_csv()
export_to_xlsx()
export_to_json()
export_to_msql()
export_to_md()
# 登出系统
bs.logout()
if __name__ == '__main__':
main()
导出为Excel
# 结果集输出到Excel文件
def export_to_xlsx():
result.to_excel("E:/hs300_stocks.xlsx", encoding="gbk", index=True)
导出为CSV
# 结果集输出到csv文件
def export_to_csv():
result.to_csv("E:/hs300_stocks.csv", encoding="gbk", index=True)
导出为JSON
# 结果集输出到xlsx文件
def export_to_json():
result.to_json("E:/hs300_stocks.json")
导出为Markdown
# 结果集导出到Markdown文件
def export_to_md():
result.to_markdown("E:/hs300_stocks.md")
导入MySQL数据库中
# 结果集导入到MySql数据库
def export_to_msql():
connection = create_engine('mysql+pymysql://root:root@localhost:3306/data')
con = connection.connect()
'''
if_exists 参数用于当目标表已经存在时的处理方式默认是 fail,即目标表存在就失败,另外两个选项是 replace 表示替代原表,即删除再创建,append 选项仅添加数据。使用 append 可以达到要求。
'''
result.to_sql(name="stock", con=con, if_exists='append', index=True)
操作案例
获取沪深300成分股基本资料,代码如下:
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)
'''
返回数据说明 query_hs300_stocks
参数名称 参数描述
updateDate 更新日期
code 证券代码
code_name 证券名称
'''
# 获取沪深300成分股的基本资料
hs_data = bs.query_hs300_stocks()
print('query_hs300 error_code:'+hs_data.error_code)
print('query_hs300 error_msg:'+hs_data.error_msg)
data_list = []
while (hs_data.error_code == '0') & hs_data.next():
'''
返回数据说明 query_stock_basic
参数名称 参数描述
code 证券代码
code_name 证券名称
ipoDate 上市日期
outDate 退市日期
type 证券类型,其中1:股票,2:指数,3:其它
status 上市状态,其中1:上市,0:退市
'''
# 获取证券基本资料
rs = bs.query_stock_basic(code=hs_data.get_row_data()[1])
data_list.append(rs.get_row_data())
# print(rs.get_data())
result = pd.DataFrame(data_list, columns=rs.fields)
# 结果集输出到csv文件
result.to_excel("E:\hstock_basic.xlsx",index=False)
# 登出系统
bs.logout()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yang!