柒索

一个头脑聪明,五肢发达的男人。

0%

使用baostock(证券宝)获取金融数据

产品介绍

证券宝是一个免费、开源的证券数据平台,提供大量准确、完整的证券历史行情数据、上市公司财务数据等。

通过python API获取证券数据信12息,返回的数据格式:Pandas DataFrame类型,支持通过自定义的数据存储功能,将数据全部保存到本地后进行分析。目前只支持Python3.5及以上(暂不支持Python 2.x版本)。

安装使用

软件安装

1
pip install baostock

登入和登出

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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成分股为例,具体实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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

1
2
3
# 结果集输出到Excel文件
def export_to_xlsx():
result.to_excel("E:/hs300_stocks.xlsx", encoding="gbk", index=True)

导出为CSV

1
2
3
# 结果集输出到csv文件
def export_to_csv():
result.to_csv("E:/hs300_stocks.csv", encoding="gbk", index=True)

导出为JSON

1
2
3
# 结果集输出到xlsx文件
def export_to_json():
result.to_json("E:/hs300_stocks.json")

导出为Markdown

1
2
3
# 结果集导出到Markdown文件
def export_to_md():
result.to_markdown("E:/hs300_stocks.md")

导入MySQL数据库中

1
2
3
4
5
6
7
8
# 结果集导入到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成分股基本资料,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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()