当前位置:首页>python>用Python获取股票数据:AKShare入门实战

用Python获取股票数据:AKShare入门实战

  • 2026-09-10 16:55:01
用Python获取股票数据:AKShare入门实战

数据是量化投资的基石。本文带你5分钟上手Python股票数据获取,从零搭建你的量化数据源。


一、为什么选择AKShare?

在Python金融数据领域,有几大主流选择:

       
                                           
工具优点缺点适用场景
AKShare免费、数据全、更新快偶有稳定性问题个人研究、回测
Tushare数据质量高、稳定高级数据需积分生产环境
YFinance美股数据方便A股支持有限美股分析
JoinQuant集成度高需平台依赖策略回测
       
     

AKShare的优势:

  • • ✅ 完全免费,无需注册
  • • ✅ A股数据全面(行情、财务、宏观、期货)
  • • ✅ 更新及时,支持实时数据
  • • ✅ 社区活跃,文档完善

二、环境准备

安装AKShare

pip install akshare -i https://pypi.tuna.tsinghua.edu.cn/simple

依赖库

pip install pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

三、实战代码

3.1 获取股票列表

import akshare as ak

# 获取所有A股股票列表

stock_df = ak.stock_zh_a_spot_em()
print
(f"A股上市公司数量:{len(stock_df)}")
print
(stock_df.head(10)[['代码', '名称', '最新价', '涨跌幅']])

输出示例:

A股上市公司数量:5389
    代码    名称    最新价   涨跌幅
0  000001  平安银行   10.25   1.28
1  000002   万科A    8.56  -0.58
2  000063  中兴通讯   28.90   2.15
...

3.2 获取个股历史K线

import akshare as ak
import
 pandas as pd

# 获取贵州茅台历史日线数据

df = ak.stock_zh_a_hist(
    symbol="600519",      # 股票代码
    period="daily",       # 周期:daily, weekly, monthly
    start_date="20240101", # 开始日期
    end_date="20260323",   # 结束日期
    adjust="qfq"          # 复权:qfq前复权,hfq后复权
)

print
(f"获取到 {len(df)} 条数据")
print
(df.tail())

输出示例:

获取到 299 条数据
           日期    开盘    收盘    最高    最低    成交量
294  2026-03-17  1580.0  1575.0  1588.0  1568.0  15234
295  2026-03-18  1576.0  1590.0  1595.0  1570.0  18956
...

3.3 获取实时行情

import akshare as ak
import
 time

# 获取多只股票的实时行情

codes = ['600519', '000858', '002594']  # 茅台、五粮液、比亚迪

for
 code in codes:
    df = ak.stock_zh_a_spot_em()
    stock = df[df['代码'] == code]
    if
 not stock.empty:
        name = stock['名称'].values[0]
        price = stock['最新价'].values[0]
        change = stock['涨跌幅'].values[0]
        print
(f"{name}({code}): ¥{price}, 涨跌: {change}%")
    time.sleep(0.5)  # 避免请求过快

3.4 数据可视化

import akshare as ak
import
 matplotlib.pyplot as plt
import
 matplotlib.dates as mdates
from
 datetime import datetime

# 获取数据

df = ak.stock_zh_a_hist(symbol="600519", period="daily", 
                        start_date="20241001", end_date="20260323", adjust="qfq")

# 转换日期

df['日期'] = pd.to_datetime(df['日期'])

# 绘制K线图简化版(收盘价走势)

plt.figure(figsize=(12, 6))
plt.plot(df['日期'], df['收盘'], label='收盘价', color='#0F4C81', linewidth=1.5)
plt.fill_between(df['日期'], df['收盘'], alpha=0.3, color='#0F4C81')

# 添加均线

df['MA5'] = df['收盘'].rolling(window=5).mean()
df['MA20'] = df['收盘'].rolling(window=20).mean()
plt.plot(df['日期'], df['MA5'], label='MA5', color='orange', linewidth=1)
plt.plot(df['日期'], df['MA20'], label='MA20', color='red', linewidth=1)

plt.title('贵州茅台(600519) 股价走势', fontsize=14, fontweight='bold')
plt.xlabel('日期')
plt.ylabel('价格(元)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

3.5 批量获取多只股票数据

import akshare as ak
import
 pandas as pd

def
 get_stock_data_batch(codes, start_date, end_date):
    """
    批量获取多只股票的历史数据
    
    Parameters:
        codes: 股票代码列表,如 ['600519', '000858']
        start_date: 开始日期 '20240101'
        end_date: 结束日期 '20260323'
    
    Returns:
        dict: {股票代码: DataFrame}
    """

    data_dict = {}
    
    for
 code in codes:
        try
:
            df = ak.stock_zh_a_hist(
                symbol=code,
                period="daily",
                start_date=start_date,
                end_date=end_date,
                adjust="qfq"
            )
            data_dict[code] = df
            print
(f"✅ 成功获取 {code},共 {len(df)} 条数据")
        except
 Exception as e:
            print
(f"❌ 获取 {code} 失败: {e}")
    
    return
 data_dict

# 使用示例

stocks = ['600519', '000858', '002594', '300750']
data = get_stock_data_batch(stocks, '20250101', '20260323')

# 计算收益率

for
 code, df in data.items():
    start_price = df['收盘'].iloc[0]
    end_price = df['收盘'].iloc[-1]
    return_rate = (end_price - start_price) / start_price * 100
    print
(f"{code}: 收益率 {return_rate:.2f}%")

四、进阶技巧

4.1 获取指数数据

import akshare as ak

# 获取上证指数历史数据

sh_index = ak.index_zh_a_hist(symbol="000001", period="daily", 
                               start_date="20250101", end_date="20260323")
print
(sh_index.tail())

# 获取行业板块数据

sector_df = ak.stock_board_industry_name_em()
print
(sector_df.head(10))

4.2 获取财务数据

import akshare as ak

# 获取个股财务指标

finance_df = ak.stock_financial_analysis_indicator(symbol="600519")
print
(finance_df[['报告期', '营业收入', '净利润', 'ROE']].head())

五、完整实战案例

"""
股票数据获取完整示例
功能:获取指定股票近期数据,计算基础统计指标
"""

import
 akshare as ak
import
 pandas as pd
import
 numpy as np

def
 analyze_stock(code, name, days=30):
    """分析单只股票"""

    # 获取数据

    df = ak.stock_zh_a_hist(symbol=code, period="daily", 
                            start_date="20250201", end_date="20260323")
    
    # 取最近N天

    recent = df.tail(days)
    
    # 计算指标

    stats = {
        '股票代码'
: code,
        '股票名称'
: name,
        '最新价'
: recent['收盘'].iloc[-1],
        '区间最高'
: recent['最高'].max(),
        '区间最低'
: recent['最低'].min(),
        '区间涨幅'
: (recent['收盘'].iloc[-1] / recent['收盘'].iloc[0] - 1) * 100,
        '日均成交量'
: recent['成交量'].mean(),
        '波动率'
: recent['涨跌幅'].std()
    }
    
    return
 stats

# 分析多只股票

watchlist = [
    ('600519', '贵州茅台'),
    ('000858', '五粮液'),
    ('002594', '比亚迪'),
    ('300750', '宁德时代')
]

results = []
for
 code, name in watchlist:
    try
:
        stats = analyze_stock(code, name, days=30)
        results.append(stats)
        print
(f"✅ {name} 分析完成")
    except
 Exception as e:
        print
(f"❌ {name} 分析失败: {e}")

# 汇总展示

result_df = pd.DataFrame(results)
print
("\n" + "="*60)
print
("股票分析汇总")
print
("="*60)
print
(result_df.to_string(index=False))

六、常见问题

Q1: 获取数据时报错怎么办?

# 添加异常处理
try
:
    df = ak.stock_zh_a_hist(symbol="600519")
except
 Exception as e:
    print
(f"获取失败: {e}")
    # 可尝试更换数据源或重试

Q2: 如何保存数据到本地?

# 保存为CSV
df.to_csv('stock_data.csv', index=False, encoding='utf-8-sig')

# 保存为Excel

df.to_excel('stock_data.xlsx', index=False)

Q3: 数据更新频率?

  • • 日线数据:交易日收盘后更新
  • • 实时行情:盘中每几秒更新
  • • 财务数据:季报/年报发布后更新

七、下节预告

下一期我们将学习: 《用Python计算技术指标:MACD金叉死叉实战》

  • • MACD指标原理详解
  • • Python实现MACD计算
  • • 金叉死叉信号识别
  • • 回测策略初探

完整代码已上传,复制即可运行。建议动手实践,遇到问题欢迎在评论区交流!

本文代码基于AKShare 1.15+版本,Python 3.8+环境测试通过。

                 

最新文章

随机文章