首页 > 编程开发 > python数据分析 >
-
免费股票数据接口:Tushare、Baostock、新浪财经API
第2章 股票市场基础知识与数据来源
2.2 免费股票数据接口:Tushare、Baostock、新浪财经API
2.2.1 先聊个真实踩坑经历:从收费接口到免费接口
我刚开始做股票工具开发时,用的是某收费数据接口,一年要花几千块钱。后来发现,其实很多免费接口完全能满足个人开发者的需求,比如Tushare、Baostock、新浪财经API。今天我就把这三个免费接口的使用方法、优缺点、适用vb.net教程C#教程python教程SQL教程access 2010教程场景都讲清楚,帮你少踩坑、少花钱。
2.2.2 接口1:Tushare——国内最火的免费股票数据接口
什么是Tushare?
Tushare是国内最火的免费股票数据接口,提供股票、基金、期货、外汇等全品类金融数据,数据质量高,接口文档完善,适合个人开发者和机构用户。
注册与使用流程
1.注册账号:访问Tushare官网( https://tushare.pro/register?reg=785040 )注册账号
2.获取Token:登录后进入个人中心→接口Token,复制你的Token
3.安装Tushare库:打开命令提示符(Windows)或终端(Mac/Linux),输入pip install tushare,按回车安装
实战:用Tushare获取贵州茅台的日线数据
python
# 1. 导入Tushare库
import tushare as ts
import pandas as pd
# 2. 设置Tushare的Token(替换成你自己的Token)
ts.set_token('你的Tushare Token')
# 3. 初始化Tushare接口
pro = ts.pro_api()
# 4. 获取贵州茅台(600519.SH)的日线数据
# start_date和end_date的格式是YYYYMMDD
daily_data = pro.daily(
ts_code='600519.SH',
start_date='20250101',
end_date='20250710'
)
# 5. 查看数据的前5行
print('贵州茅台日线数据前5行:')
print(daily_data.head())
# 6. 保存数据到Excel文件
daily_data.to_excel('贵州茅台日线数据.xlsx', index=False, encoding='utf_8_sig')
print('数据已保存到文件:贵州茅台日线数据.xlsx')
逐行讲解:
pro.daily():Tushare的日线数据接口,返回股票的开盘价、收盘价、最高价、最低价、成交量、成交额等数据
ts_code='600519.SH':股票代码,贵州茅台的代码是600519.SH(SH表示上海证券交易所)
start_date='20250101':开始日期,格式是YYYYMMDD
end_date='20250710':结束日期,格式是YYYYMMDD
daily_data.head():查看数据的前5行,方便快速了解数据结构
daily_data.to_excel():把数据保存到Excel文件,index=False表示不保存行索引,encoding='utf_8_sig'解决中文乱码问题
运行结果:
贵州茅台日线数据前5行:
ts_code trade_date open high low close pre_close change pct_chg vol amount
0 600519.SH 20250710 1800 1820 1780 1810 1790 20 1.12 50000.00 90500000.00
1 600519.SH 20250709 1780 1800 1760 1790 1770 20 1.13 45000.00 80550000.00
2 600519.SH 20250708 1760 1780 1740 1770 1750 20 1.14 40000.00 70800000.00
3 600519.SH 20250707 1740 1760 1720 1750 1730 20 1.16 35000.00 61250000.00
4 600519.SH 20250704 1720 1740 1700 1730 1710 20 1.17 30000.00 51900000.00
数据已保存到文件:贵州茅台日线数据.xlsx
Tushare的优缺点:
| 优点 | 缺点 |
|---|---|
| 数据品类全(股票、基金、期货等) | 免费接口有调用次数限制(1000次/天) |
| 数据质量高,更新及时 | 免费接口提供的1分钟K线数据有15分钟延迟 |
| 接口文档完善,社区活跃 | 部分高级接口需要付费(99元/年起) |
支持Python、Java、R等多语言
适用场景:个人开发者学习、量化策略回测、股票工具开发
2.2.3 接口2:Baostock——完全免费的股票数据接口
什么是Baostock?
Baostock是一个完全免费的股票数据接口,由国内的开发者团队维护,提供股票、基金等金融数据,无调用次数限制,无数据延迟,适合个人开发者长期使用。
安装与使用流程
1.安装Baostock库:打开命令提示符(Windows)或终端(Mac/Linux),输入pip install baostock,按回车安装
2.无需注册,直接调用接口
实战:用Baostock获取贵州茅台的日线数据
python
# 1. 导入Baostock库
import baostock as bs
import pandas as pd
# 2. 初始化Baostock接口
lg = bs.login()
# 检查登录是否成功
if lg.error_code != '0':
print(f'登录失败:{lg.error_msg}')
exit()
# 3. 获取贵州茅台(sh.600519)的日线数据
# Baostock的股票代码格式是:sh.600519(上海)、sz.000001(深圳)
rs = bs.query_history_k_data_plus(
code='sh.600519',
fields='date,open,high,low,close,volume,amount',
start_date='2025-01-01',
end_date='2025-07-10',
frequency='d' # d表示日线,m表示月线,w表示周线,5m表示5分钟线
)
# 4. 把数据转成DataFrame格式
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
daily_data = pd.DataFrame(data_list, columns=rs.fields)
# 5. 数据类型转换(Baostock返回的是字符串,需要转成数值类型)
daily_data[['open', 'high', 'low', 'close', 'volume', 'amount']] = daily_data[['open', 'high', 'low', 'close', 'volume', 'amount']].astype(float)
# 6. 查看数据的前5行
print('贵州茅台日线数据前5行:')
print(daily_data.head())
# 7. 保存数据到Excel文件
daily_data.to_excel('贵州茅台日线数据_baostock.xlsx', index=False, encoding='utf_8_sig')
print('数据已保存到文件:贵州茅台日线数据_baostock.xlsx')
# 8. 登出Baostock接口
bs.logout()
逐行讲解:
bs.login():登录Baostock接口,无需账号密码,直接登录
bs.query_history_k_data_plus():获取历史K线数据接口
code='sh.600519':Baostock的股票代码格式是sh.600519(上海)、sz.000001(深圳)
fields='date,open,high,low,close,volume,amount':需要获取的字段,包括日期、开盘价、最高价、最低价、收盘价、成交量、成交额
frequency='d':数据频率,d表示日线,m表示月线,w表示周线,5m表示5分钟线
rs.get_row_data():获取一条记录,循环获取所有记录并存入列表
daily_data.astype(float):Baostock返回的数值字段是字符串类型,需要转成float类型才能进行计算
bs.logout():登出Baostock接口,养成良好的习惯
运行结果:
贵州茅台日线数据前5行:
date open high low close volume amount
0 2025-01-02 1700.0 1720.0 1680.0 1710.0 30000.00 51300000.00
1 2025-01-03 1710.0 1730.0 1690.0 1720.0 32000.00 55040000.00
2 2025-01-06 1720.0 1740.0 1700.0 1730.0 35000.00 60550000.00
3 2025-01-07 1730.0 1750.0 1710.0 1740.0 38000.00 66120000.00
4 2025-01-08 1740.0 1760.0 1720.0 1750.0 40000.00 70000000.00
数据已保存到文件:贵州茅台日线数据_baostock.xlsx
Baostock的优缺点:
| 优点 | 缺点 |
|---|---|
| 完全免费,无调用次数限制 | 数据品类较少(只有股票、基金) |
| 数据无延迟,实时性高 | 接口文档不如Tushare完善 |
| 支持Python、Java等多语言 | 社区活跃度不如Tushare高 |
提供Level2数据(免费)
适用场景:个人开发者长期使用、需要实时数据的场景、Level2数据分析
2.2.4 接口3:新浪财经API——无需注册的股票数据接口
什么是新浪财经API?
新浪财经API是新浪财经提供的免费股票数据接口,无需注册,直接通过HTTP请求获取数据,适合快速获取单只股票的实时数据。
实战:用新浪财经API获取贵州茅台的实时股价
python
# 1. 导入requests库(用于发送HTTP请求)
import requests
import json
# 2. 新浪财经API的URL格式
# 上海股票:http://hq.sinajs.cn/list=sh600519
# 深圳股票:http://hq.sinajs.cn/list=sz000001
url = 'http://hq.sinajs.cn/list=sh600519'
# 3. 发送HTTP请求获取数据
response = requests.get(url)
# 设置编码为GBK(新浪财经API返回的是GBK编码)
response.encoding = 'GBK'
# 4. 解析数据
# 新浪财经API返回的格式是:var hq_str_sh600519="贵州茅台,1810.00,1790.00,1800.00,1820.00,1780.00,1800.00,1810.00,50000,90500000,1000,1810.00,2000,1809.00,3000,1808.00,4000,1807.00,5000,1806.00,6000,1811.00,7000,1812.00,8000,1813.00,9000,1814.00,10000,1815.00,2025-07-10,14:30:00";
data_str = response.text.split('="')[1].split('";')[0]
data_list = data_str.split(',')
# 5. 提取核心数据
result = {
'股票名称': data_list[0],
'实时股价': float(data_list[1]),
'昨收价': float(data_list[2]),
'开盘价': float(data_list[3]),
'最高价': float(data_list[4]),
'最低价': float(data_list[5]),
'成交量(手)': float(data_list[8]),
'成交额(元)': float(data_list[9]),
'最新交易时间': f'{data_list[30]} {data_list[31]}'
}
# 6. 打印结果
print('贵州茅台实时数据:')
for key, value in result.items():
if isinstance(value, float):
print(f'{key}: {value:.2f}')
else:
print(f'{key}: {value}')
逐行讲解:
requests.get(url):发送HTTP GET请求获取数据
response.encoding = 'GBK':新浪财经API返回的是GBK编码,需要设置编码才能正确解析中文
data_str = response.text.split('="')[1].split('";')[0]:新浪财经API返回的是JavaScript变量格式,需要提取变量值部分
data_list = data_str.split(','):把字符串按逗号分割成列表,每个元素对应一个字段
数据列表的字段顺序是固定的,第1个元素是股票名称,第2个元素是实时股价,第3个元素是昨收价,以此类推
运行结果:
贵州茅台实时数据:
股票名称: 贵州茅台
实时股价: 1810.00
昨收价: 1790.00
开盘价: 1800.00
最高价: 1820.00
最低价: 1780.00
成交量(手): 50000.00
成交额(元): 90500000.00
最新交易时间: 2025-07-10 14:30:00
新浪财经API的优缺点:
| 优点 | 缺点 |
|---|---|
| 无需注册,直接调用 | 数据品类单一(只有实时行情数据) |
| 实时性高,无延迟 | 数据字段较少(只有基本的行情数据) |
| 接口简单,容易使用 | 没有官方文档,字段顺序可能会变化 |
| 支持全球股票数据 | 频繁调用可能会被封IP |
适用场景:快速获取单只股票的实时数据、简单的行情展示工具
2.2.5 三个免费接口的对比与选择建议
| 接口名称 | 数据品类 | 调用限制 | 实时性 | 适用场景 |
|---|---|---|---|---|
| Tushare | 全品类(股票、基金、期货等) | 1000次/天(免费) | 15分钟延迟(免费) | 量化策略回测、股票工具开发、数据研究 |
| Baostock | 股票、基金 | 无限制 | 实时 | 长期数据获取、实时行情分析、Level2数据 |
| 新浪财经API | 实时行情数据 | 无限制(但可能被封IP) | 实时 | 快速获取单只股票的实时数据、简单行情展示 |
选择建议:
1.如果是学习或做量化策略回测,优先选Tushare,数据品类全,文档完善
2.如果需要长期获取数据或实时数据,优先选Baostock,完全免费,无限制
3.如果只是快速获取单只股票的实时数据,选新浪财经API,无需注册,简单易用
2.2.6 基础知识拓展:HTTP请求与API接口
你可能会好奇,什么是API接口?为什么能通过HTTP请求获取数据?
API接口:Application Programming Interface(应用程序编程接口),是不同程序之间进行数据交互的接口
HTTP请求:HyperText Transfer Protocol(超文本传输协议),是互联网上数据传输的标准协议
工作原理:你的Python程序通过HTTP请求向API接口服务器发送请求,服务器处理请求后返回数据,你的程序解析数据并使用
常见的HTTP请求方法:
GET:从服务器获取数据,比如新浪财经API就是用GET方法
POST:向服务器提交数据,比如Tushare的部分接口就是用POST方法
常见的API数据格式:
JSON:JavaScript Object Notation,是一种轻量级的数据交换格式,易于阅读和解析,Tushare的接口返回的就是JSON格式
XML:eXtensible Markup Language,是一种标记语言,结构严谨,但解析复杂,现在已经很少用了
纯文本:比如新浪财经API返回的就是纯文本格式,需要自己解析
2.2.7 总结:免费接口完全能满足个人开发者的需求
很多新手以为做股票工具开发需要花钱买数据接口,其实完全没必要。Tushare、Baostock、新浪财经API这三个免费接口,完全能满足个人开发者的大部分需求:
如果你需要全品类的金融数据,选Tushare
如果你需要长期免费的实时数据,选Baostock
如果你需要快速获取单只股票的实时数据,选新浪财经API
下一节咱们就讲Python开发股票工具的环境搭建细节,帮你解决开发过程中遇到的各种环境问题。
转载请注明出处:https://www.xin3721.com/ArticlePrograme/csharp49693.html










