Baostock(证券宝)是一个免费、开源的证券数据平台(无需注册)。详见点这里。
首先,用pip安装baostock。win+r输入cmd进入命令提示符界面。输入pip install baostock
pip install baostock
导入baostock,并且重命名为bs
import baostock as bs
baostock下载股票代码,使用query_all_stock(day=None)函数
data = bs.query_all_stock().get_data()
.get_data()方法把数据直接转化成pandas的DataFrame
定义函数get_stock_codes,该函数返回股票代码列表,该列表可以用来下载股票历史数据
def get_stock_codes(day=None):
"""
利用baostock获取沪深两市的股票代码
因为钱不够,所以剔除掉中小板,创业板和北交所的股票代码,指数代码也剔除掉吧
:day: 日期,默认为空
:return: 筛选后的股票代码列表
"""
# 登入baostock
bs.login()
# 获取股票代码
codes = bs.query_all_stock(day=day).get_data()
# 股票代码筛选,剔除中小板,创业板,北交所以及指数代码
df = codes[((codes['code'] < 'sz.300000') & (codes['code'] > 'sh689000')) | (
(codes['code'] < 'sh.688000') & (codes['code'] > 'sh.009999'))]
stock_codes_list = df['code'].to_list()
# 登出baostock
bs.logout()
return stock_codes_list
pymysql是Python用来操作Mysql的第三方库。同样用pip install 安装
pip install pymysql
导包
import pymysql
连接数据库,这里是提前建好了数据库stock_codes
db = pymysql.connect(host='localhost',
user='root',
password='123456',
database='STOCK_CODES',
port=3306,
charset='utf8')
游标不要忘
cursor = db.cursor()
当然,也可以用pymysq建库
db = pymysql.connect(host='localhost',
user='root',
password='123456',
port=3306,
charset='utf8')
# 获取游标
cursor = db.cursor()
# 建库
cursor.execute("CREATE DATABASE IF NOT EXISTS STOCK_CODES")
建表,要申明表字段
cursor.execute("CREATE TABLE CODES(code char(10),tradeStatus int,code_name char(10)")
定义codes_to_mysql()函数,将股票代码写入MySQL
def codes_to_mysql(codes):
"""
将筛选后的股票代码些入MySQL数据库
:param codes: 筛选后的股票代码
:return: None
"""
# 打开数据库连接
db = pymysql.connect(host='localhost',
user='root',
password='123456',
database='STOCK_CODES',
port=3306,
charset='utf8')
# 使用cursor()方法创建一个游标对象cursor
cursor = db.cursor()
# 使用execute()方法执行SQL,如果CODES表存在,则删除
cursor.execute('DROP TABLE IF EXISTS CODES')
#预处理sql语句
sql = """CREATE TABLE CODES(code char(10),
tradeStatus int,
code_name char(10)"""
cursor.execute(sql)
bs.login()
# 获取股票代码数据
data = bs.query_all_stock().get_data()
bs.logout()
# 筛选股票代码
data = data[data['code'].isin(codes)]
for i in range(len(codes)):
# SQL 插入语句
sql1 = """INSERT INTO CODES(code,tradeStatus,code_name)
VALUES ('%s','%s','%s')"""%(data.iloc[i].loc['code'],
data.iloc[i].loc['tradeStatus'],
data.iloc[i].loc['code_name'])
cursor.execute(sql1)
# 提交
db.commit()
# 关闭数据库
db.close()
附:完整代码
import baostock as bs
import pymysql
def get_stock_codes(day=None):
"""
利用baostock获取沪深两市的股票代码
因为钱不够,所以剔除掉中小板,创业板和北交所的股票代码,指数代码也剔除掉吧
:day: 日期,默认为空
:return: 筛选后的股票代码列表
"""
# 登入baostock
bs.login()
# 获取股票代码
codes = bs.query_all_stock(day=day).get_data()
# 股票代码筛选
df = codes[((codes['code'] < 'sz.300000') & (codes['code'] > 'sh689000')) | (
(codes['code'] < 'sh.688000') & (codes['code'] > 'sh.009999'))]
stock_codes_list = df['code'].to_list()
# 登出baostock
bs.logout()
return stock_codes_list
def codes_to_mysql(codes):
"""
将筛选后的股票代码些入MySQL数据库
:param codes: 筛选后的股票代码
:return: None
"""
# 打开数据库连接
db = pymysql.connect(host='localhost',
user='root',
password='123456',
database='STOCK_CODES',
port=3306,
charset='utf8')
# 使用cursor()方法创建一个游标对象cursor
cursor = db.cursor()
# 使用execute()方法执行SQL,如果CODES表存在,则删除
cursor.execute('DROP TABLE IF EXISTS CODES')
#预处理sql语句
sql = """CREATE TABLE CODES(code char(10),
tradeStatus int,
code_name char(10)"""
cursor.execute(sql)
bs.login()
# 获取股票代码数据
data = bs.query_all_stock().get_data()
bs.logout()
# 筛选股票代码
data = data[data['code'].isin(codes)]
for i in range(len(codes)):
# SQL 插入语句
sql1 = """INSERT INTO CODES(code,tradeStatus,code_name)
VALUES ('%s','%s','%s')"""%(data.iloc[i].loc['code'],
data.iloc[i].loc['tradeStatus'],
data.iloc[i].loc['code_name'])
cursor.execute(sql1)
# 提交
db.commit()
# 关闭数据库
db.close()
codes_to_mysql(get_stock_codes())