【Python 实战】轻松下载股票数据的多种方法

【Python 实战】轻松下载股票数据的多种方法

在金融数据分析和量化交易等领域,获取准确、及时的股票数据是至关重要的。Python 作为一种强大的编程语言,为我们提供了丰富的工具和库来实现这一目标。本文将介绍几种常见的使用 Python 下载股票数据的方法,帮助你快速获取所需数据,开启数据分析之旅。

一、使用 pandas-datareader 从雅虎财经获取数据

1. 安装必要的库

首先,确保已经安装了 pandaspandas-datareader 库,如果没有安装,可以使用以下命令进行安装:

pip install pandas pandas-datareader

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

同时,需要到 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

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

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')

在这个示例中,我们定义了一个 get 函数,用于登录 baostock 系统,查询指定股票的历史 K 线数据,将数据处理成 DataFrame 格式后保存为 csv 文件,并在最后登出系统1 。


以上就是几种常见的使用 Python 下载股票数据的方法,每种方法都有其特点和适用场景,你可以根据自己的需求选择合适的方式来获取股票数据。希望本文对你有所帮助,如果你在实践过程中有任何问题,欢迎在评论区留言交流。

作者:疯狂的键盘侠

物联沃分享整理
物联沃-IOTWORD物联网 » 【Python 实战】轻松下载股票数据的多种方法

发表回复