使用的工具包是efinance
efinance github:https://github.com/Micro-sheep/efinance
使用efinance
工具获取股票代码的用法如下:
import efinance as ef
ef.stock.get_realtime_quotes() # 获得全部上一个交易日活跃的股票列表
ef.stock.get_quote_history("600519", beg="20200101", end="20210101", ) # 获得600519(茅台),2020-01-01至2021-01-01的全部数据
示例代码
"""
获取全部的股票数据
"""
import efinance as ef
import pandas as pd
import time
from tqdm import tqdm
from loguru import logger
def save_k_data_list(stock_code, k_dataframe):
"""这里博主使用MongoDB保存数据,大家可以换成自己的数据库"""
import pymongo
mongo_conn = pymongo.MongoClient(host='localhost', port=27017)
database_name = "stock_code"
coll = mongo_conn.get_database(database_name).get_collection("k_line") # 获得集合
dict_value = {"_id": stock_code}
for index, series in k_dataframe.iterrows():
dict_value[index] = series.to_dict()
record = coll.find_one({"_id": stock_code})
if not record:
coll.insert_one(dict_value)
else:
coll.update_one(record, {"$set": dict_value, })
def get_k_data(stock_code, begin="20200101", end="20210101"):
"""
根据efinance工具包获取股票数据
:param stock_code:股票代码
:param begin: 开始日期
:param end: 结束日期
:return:
"""
k_dataframe: pd.DataFrame = ef.stock.get_quote_history(stock_code, beg=begin, end=end, )
k_dataframe = k_dataframe.iloc[:, :9]
k_dataframe.columns = ['name', 'code', 'date', 'open', 'close', 'high', 'low', 'volume', 'turnover']
k_dataframe.index = k_dataframe['date']
k_dataframe.drop(['name', 'code', 'date'], axis=1, inplace=True)
save_k_data_list(stock_code, k_dataframe) # 开始保存数据
def main():
bond_info = ef.stock.get_realtime_quotes()
begin_date = "20150101"
end_date = "202205030"
for code in tqdm(bond_info['股票代码'], total=bond_info.shape[0]):
logger.debug("begin_save: {}", code)
time.sleep(5)
get_k_data(code, begin_date, end_date)
if __name__ == '__main__':
main()