【Python实战】如何下载股票数据:详细步骤与操作指南
一、使用 pandas-datareader 从雅虎财经获取数据
1. 安装必要的库
首先,确保已经安装了 pandas 和 pandas-datareader 库,如果没有安装,可以使用以下命令进行安装:
pip install pandas pandas-datareader
1
2. 示例代码
以下示例展示了如何获取某只股票(以苹果公司 AAPL 为例)在一定时间段内的历史数据:
import pandas as pd
import pandas_datareader.data as web
import datetime
# 设置起始日期和结束日期
start = datetime.datetime(2020, 1, 1)
end = datetime.datetime(2024, 12, 17)
# 获取股票数据
try:
df = web.DataReader('AAPL', 'yahoo', start, end)
print(df.head())
except Exception as e:
print(f"下载股票数据出现错误: {e}")
在上述代码中,我们先定义了要获取数据的起始时间和结束时间,然后使用 web.DataReader 函数,指定数据源为 'yahoo'(即雅虎财经),股票代码为 'AAPL' 以及时间范围,尝试获取股票数据并存储在 df 这个 DataFrame 中。如果下载过程中出现错误,会打印相应的错误信息。
二、通过 tushare 库获取国内股票数据
1. 安装与注册
先安装 tushare 库:
pip install tushare
1
同时,需要到 tushare 官网(https://tushare.pro/)注册账号,并获取自己的 token,用于在代码中进行身份验证以获取数据。
2. 示例代码
以下示例展示了如何获取某只股票(比如茅台,股票代码 600519.SH)的日线数据:
import tushare as ts
import pandas as pd
# 设置你的tushare token
ts.set_token('your_token_here')
pro = ts.pro_api()
# 获取股票日线数据
df = pro.daily(ts_code='600519.SH', start_date='20200101', end_date='20241217')
df = df.sort_values(by='trade_date', ascending=True)
print(df.head())
在这段代码里,首先通过 ts.set_token 函数设置自己申请到的 tushare 账号 token,然后创建 pro 对象用于后续的数据获取操作。接着使用 pro.daily 函数指定股票代码以及要获取数据的起止日期,来获取股票的日线数据,最后将获取到的数据按照交易日期进行升序排序并打印部分数据查看。
三、使用 akshare 库获取股票数据
1. 安装库
使用以下命令安装 akshare 库:
pip install akshare
1
2. 示例代码
以下是两个不同的示例,分别展示了获取沪深 300 指数成分股数据和某只股票历史日线行情数据的方法:
import akshare as ak
import pandas as pd
# 获取沪深300指数成分股数据
df = ak.index_stock_cons('000300')
print(df)
# 获取股票的历史日线行情数据
df = ak.stock_zh_a_hist(symbol='600519', period='daily', start_date='20200101', end_date='20241217')
print(df.head())
akshare 提供了大量不同类型的金融数据接口,只需根据具体需求调用相应的接口函数,并传入合适的参数即可获取数据2 。
四、利用 baostock 库获取股票数据
1. 安装库
使用以下命令安装 baostock 库:
pip install baostock
1
2. 示例代码
以下示例展示了如何通过 baostock 获取股票数据并保存为 csv 文件1 :
import baostock as bs
import pandas as pd
def get(code, start_date, end_date):
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
#### 获取历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节
rs = bs.query_history_k_data_plus(code,
"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
start_date=start_date, end_date=end_date,
frequency="d", adjustflag="3")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond error_msg:'+rs.error_msg)
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
#### 结果集输出到csv文件 ####
file_name=f"{code}_history_k_data.csv"
result.to_csv(file_name, encoding="gbk", index=False)
print(result)
#### 登出系统 ####
bs.logout()
# 获取数据并保存
get('sh.601318','2022-01-01','2024-06-12')
作者:cxgchxghfg