02利用Akshare获取股票数据
AKShare是基于Python的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。
AKShare的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行各数据源之间的交叉验证,进而再加工,从而得出科学的结论。
获取股票数据
获取股票数据本地存储
import akshare as ak
import pandas as pd
pd.set_option("expand_frame_repr", False) # True就是可以换行显示。设置成False的时候不允许换行
pd.set_option("display.max_columns", None) # 显示所有列
pd.set_option("display.max_rows", None) # 显示所有行
pd.set_option("colheader_justify", "centre") # 显示居中
def download_hist(symbol="002624", period="daily", start="1990101", end="20230318", adjust="qfq"):
stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=symbol, period=period, start_date=start, end_date=end,
adjust=adjust)
stock_zh_a_hist_df.sort_values("日期", inplace=True)
stock_zh_a_hist_df.set_index("日期", inplace=True)
if period=="daily":
stock_zh_a_hist_df.to_csv("I:\akshare_stock\stock_datas\day\{}.csv".format(symbol))
elif period=="weekly":
stock_zh_a_hist_df.to_csv("I:\akshare_stock\stock_datas\week\{}.csv".format(symbol))
elif period=="monthly":
stock_zh_a_hist_df.to_csv("I:\akshare_stock\stock_datas\month\{}.csv".format(symbol))
else:
print("period错误")
def download_hist_min(symbol="002624", start="1990-01-01 09:30:00", end="2023-02-03 15:00:00", period="30", adjust="qfq"):
stock_zh_a_hist_min_em_df = ak.stock_zh_a_hist_min_em(symbol=symbol, start_date=start, end_date=end, period=period, adjust=adjust)
stock_zh_a_hist_min_em_df.set_index("时间", inplace=True)
stock_zh_a_hist_min_em_df.to_csv("I:\akshare_stock\stock_datas\minute\"+symbol+"_{}.csv".format(period))
if __name__ == "__main__":
df = pd.read_csv("I:\akshare_stock\stock_datas\stock_list.csv")
df.sort_values("symbol", inplace=True)
code = list(df["ts_code"])
print(len(code))
for period in ["daily", "weekly", "monthly"]:
for i in range(0, len(code)):
symbol = code[i].rstrip(".SZHBJ")
download_hist(symbol=symbol, period=period)
print(symbol)
for period in ["1", "5", "15", "30", "60"]:
for i in range(0, len(code)):
symbol = code[i].rstrip(".SZHBJ")
download_hist_min(symbol=symbol, period=period)
print(symbol)
将股票数据存到mysql数据库中
"""
date:20210918
将CSV文件写入到MySQL中
"""
import pandas as pd
from sqlalchemy import create_engine
def connect_db(db):
engine = create_engine("mysql+pymysql://hao:671010@localhost:3306/{}?charset=utf8".format(db))
return engine
def create_stock(akcode, db, date):
# 读取本地CSV文件
df = pd.read_csv(
"I:\akshare_stock\stock_datas\" + date + "\{}.csv".format(akcode))
engine = connect_db(db)
# name="stocklist"全部小写否则会报错
df.to_sql(name="ak_" + date + "_{}".format(akcode), con=engine, index=False, if_exists="replace")
def create_min_stock(akcode, db, date):
# 读取本地CSV文件
df = pd.read_csv(
"I:\akshare_stock\stock_datas\minute\"+akcode+"_{}.csv".format(date))
engine = connect_db(db)
# name="stocklist"全部小写否则会报错
df.to_sql(name="ak_" + akcode + "_{}".format(date), con=engine, index=False, if_exists="replace")
def read_csv(code):
df = pd.read_csv("I:\akshare_stock\stock_datas\{}.csv".format(code))
return df
stockDB = "akshare_stock"
stockList = "stock_list"
create_stock(akcode=stockList, db=stockDB, date="day")
df1 = read_csv(stockList)
df1.sort_values("ts_code", inplace=True)
li1 = list(df1["ts_code"])
for date in ["day", "week", "month"]:
for i in range(0, len(li1)):
codeStock = li1[i].rstrip(".SHZBJ")
create_stock(akcode=codeStock, db=stockDB, date=date)
print(codeStock)
for date in ["1", "5", "15", "30", "60"]:
for i in range(0, len(li1)):
codeStock = li1[i].rstrip(".SHZBJ")
create_min_stock(akcode=codeStock, db=stockDB, date=date)
print(codeStock)
文章为作者独立观点,不代表股票交易接口观点