新浪行情API的数据获取方式与调用限制是怎样的?
摘要:
新浪财经是国内最主流的金融数据提供商之一,其行情接口因其免费、稳定、数据全面而被广大开发者广泛使用,虽然新浪官方没有提供正式的、文档化的 API,但其网页通过 JavaScript... 新浪财经是国内最主流的金融数据提供商之一,其行情接口因其免费、稳定、数据全面而被广大开发者广泛使用,虽然新浪官方没有提供正式的、文档化的 API,但其网页通过 JavaScript 动态加载数据的方式,形成了一套事实上的“非官方 API”。
核心概念:新浪行情 API 是什么?
这套 API 本质上是新浪财经网页为了在前端展示数据而设计的,开发者通过模拟浏览器向新浪的服务器发送请求,获取 JSON 格式的原始数据,然后在自己的程序中进行解析和使用。
API 端点
新浪提供了多个不同功能的端点,用于获取不同类型的数据,以下是一些最常用和最核心的端点:
a) 获取实时行情数据
这是最核心的功能,用于获取单个或多个股票的实时价格、涨跌幅等信息。
-
接口地址:
https://hq.sinajs.cn/list= -
参数说明:
(图片来源网络,侵删)list: 这是关键的查询参数,你需要传入一个或多个股票代码,多个代码用逗号 分隔。
-
股票代码格式:
- A股:
sh(上海) 或sz(深圳) + 6位数字。sh600519(贵州茅台),sz000858(五粮液)。 - 港股:
hk+ 5位数字。hk00700(腾讯控股)。 - 美股:
gb_+ 美股代码。gb_aapl(苹果公司),gb_msft(微软)。
- A股:
-
返回数据格式:
- 返回的是一段 JavaScript 代码,格式为
var hq_str_s_sh600519="...";。 - 你需要提取 和 之间的字符串,它是一个由逗号 分隔的文本数据。
- 数据字段顺序(非常重要):
- 当前价
- 昨收价
- 今开价
- 最高价
- 最低价
- 买一价
- 卖一价
- 成交量 (手)
- 成交额 (万)
- 涨跌幅 (注意:这个值是原始字符串,需要计算)
- 换手率
- 市盈率 (PE)
- ... (还有其他一些字段,如总市值、流通市值等)
- 返回的是一段 JavaScript 代码,格式为
-
示例请求:
- 获取贵州茅台和腾讯控股的实时数据:
https://hq.sinajs.cn/list=sh600519,hk00700
- 获取贵州茅台和腾讯控股的实时数据:
-
示例响应:
var hq_str_s_sh600519="贵州茅台,1800.000,1810.000,1815.000,1830.000,1795.000,1798.00,1801.00,100,180000.00,-0.55,0.50,40.15,28560.00,28560.00,2025-10-27,15:00:00,00"; var hq_str_hk_00700="腾讯控股,320.600,325.400,322.000,328.600,318.200,318.60,319.00,10000,322000.00,-1.47,0.45,9.89,312000000.00,312000000.00,2025-10-27,15:00:00,00";
你需要解析 和 之间的内容,然后按逗号分割。
b) 获取分时/历史K线数据
这个接口用于获取股票的分时图数据或历史K线数据。
-
接口地址:
https://quotes.sina.cn/cn/api/openapi-proxy/marketdata/getMiniKLine?symbol= -
参数说明:
symbol: 股票代码,格式与上面类似,sh600519。- 数据类型: 这个接口的返回数据中有一个
data字段,里面包含了不同周期的K线数据,你需要根据data对象中的键来获取:day: 日K线week: 周K线month: 月K线5min: 5分钟K线15min: 15分钟K线30min: 30分钟K线60min: 60分钟K线
-
返回数据格式: JSON,数据是一个数组,每个元素代表一根K线,通常包含
date,open,high,low,close,volume等字段。 -
示例请求:
- 获取贵州茅台的日K线数据:
https://quotes.sina.cn/cn/api/openapi-proxy/marketdata/getMiniKLine?symbol=sh600519
- 获取贵州茅台的日K线数据:
c) 获取板块/行业数据
获取某个板块或行业内所有股票的列表和概况。
-
接口地址:
https://hq.sinajs.cn/list= -
参数说明:
list: 传入板块代码,板块代码通常以gb开头,后面是拼音或英文。gb_zs: 上证指数gb_zh: 深证成指gb_hk: 恒生指数gb_us: 美股指数gb_mlhy: 麻辣烫行业 (一个示例)gb_zn: 新能源
-
示例请求:
- 获取新能源板块的所有股票:
https://hq.sinajs.cn/list=gb_zn
- 获取新能源板块的所有股票:
使用方法(代码示例)
下面提供 Python 和 JavaScript 的示例,展示如何调用这些接口。
Python 示例
你需要安装 requests 库。
pip install requests
import requests
import json
def get_realtime_quotes(stock_codes):
"""
获取实时行情数据
:param stock_codes: 股票代码列表,如 ['sh600519', 'sz000858']
:return: 解析后的行情数据字典
"""
# 将股票代码列表用逗号连接
code_str = ",".join(stock_codes)
url = f"https://hq.sinajs.cn/list={code_str}"
# 设置 User-Agent 模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # 如果请求失败则抛出异常
response.encoding = 'gbk' # 新浪返回的数据编码是 gbk
# 解析返回的JS格式字符串
data_str = response.text
quotes = {}
for item in data_str.split(';'):
if not item:
continue
# 提取 var hq_str_x_xxxx="..." 中的内容
parts = item.split('="')
if len(parts) == 2:
stock_key = parts[0].split('_')[-1] # 获取 sh600519 这样的键
quote_data_str = parts[1][:-1] # 去掉末尾的引号
quote_list = quote_data_str.split(',')
# 将数据存入字典
quotes[stock_key] = {
"name": quote_list[0],
"current_price": float(quote_list[1]),
"open": float(quote_list[2]),
"high": float(quote_list[3]),
"low": float(quote_list[4]),
"volume": int(quote_list[8]),
# ... 可以根据需要添加更多字段
}
return quotes
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
# --- 使用示例 ---
if __name__ == "__main__":
stocks = ['sh600519', 'sz000858', 'hk00700']
realtime_data = get_realtime_quotes(stocks)
if realtime_data:
for code, data in realtime_data.items():
print(f"股票代码: {code}")
print(f"名称: {data['name']}")
print(f"当前价: {data['current_price']}")
print(f"成交量: {data['volume']}")
print("-" * 20)
JavaScript (Node.js) 示例
你需要安装 axios 库。
npm install axios
const axios = require('axios');
async function getRealtimeQuotes(stockCodes) {
const codeStr = stockCodes.join(',');
const url = `https://hq.sinajs.cn/list=${codeStr}`;
const headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
};
try {
const response = await axios.get(url, { headers, responseType: 'arraybuffer' });
// 将 Buffer 转换为 GBK 编码的字符串
const dataStr = iconv.decode(response.data, 'gbk'); // 需要安装 iconv-lite: npm install iconv-lite
const quotes = {};
const items = dataStr.split(';');
for (const item of items) {
if (!item) continue;
const parts = item.split('="');
if (parts.length === 2) {
const stockKey = parts[0].split('_')[-1];
const quoteDataStr = parts[1].slice(0, -1); // 去掉末尾的引号
const quoteList = quoteDataStr.split(',');
quotes[stockKey] = {
name: quoteList[0],
currentPrice: parseFloat(quoteList[1]),
open: parseFloat(quoteList[2]),
high: parseFloat(quoteList[3]),
low: parseFloat(quoteList[4]),
volume: parseInt(quoteList[8]),
};
}
}
return quotes;
} catch (error) {
console.error('请求失败:', error);
return null;
}
}
// --- 使用示例 ---
(async () => {
const stocks = ['sh600519', 'sz000858', 'hk00700'];
const realtimeData = await getRealtimeQuotes(stocks);
if (realtimeData) {
for (const [code, data] of Object.entries(realtimeData)) {
console.log(`股票代码: ${code}`);
console.log(`名称: ${data.name}`);
console.log(`当前价: ${data.currentPrice}`);
console.log(`成交量: ${data.volume}`);
console.log('---------------------');
}
}
})();
重要注意事项
-
非官方接口:
- 稳定性无保障: 新浪随时可能修改接口地址或数据格式,导致你的代码失效。
- 频率限制: 如果请求过于频繁,可能会被临时封禁 IP,建议在代码中加入适当的延迟(如
time.sleep(1))。 - 仅供学习/个人使用: 严禁用于商业用途或高频数据抓取,否则有法律风险。
-
数据编码:
- 返回的数据流通常是
GBK编码,而不是常见的UTF-8,在 Python 中需要设置response.encoding = 'gbk',在 Node.js 中需要使用iconv-lite等库进行解码。
- 返回的数据流通常是
-
数据格式变化:
虽然接口稳定了很多年,但新浪仍有可能在不通知的情况下更新数据结构,增加或减少字段,你的解析逻辑需要具备一定的鲁棒性。
-
替代方案:
- 如果新浪 API 无法满足你的需求(例如需要更稳定、更正式的服务),可以考虑使用官方或商业金融数据 API,
- Tushare: 提供丰富的A股数据,有免费和付费套餐,社区活跃。
- AKShare: 一个开源的金融数据接口库,集成了多个数据源,包括新浪,封装得很好,易于使用。
- Wind (万得): 国内金融数据领域的龙头,但价格非常昂贵,主要面向机构客户。
- 东方财富Choice: 同样是专业的金融数据终端。
- 如果新浪 API 无法满足你的需求(例如需要更稳定、更正式的服务),可以考虑使用官方或商业金融数据 API,
新浪行情 API 是一个非常强大且方便的免费数据源,非常适合个人开发者、学生和量化交易初学者进行学习和项目原型开发,但在使用时,一定要清楚地认识到它的“非官方”属性,并做好应对其可能发生变化的准备,对于需要长期稳定运行的生产环境,建议转向更专业的数据服务提供商。
作者:咔咔本文地址:https://www.jits.cn/content/33582.html发布于 04-20
文章转载或复制请以超链接形式并注明出处杰思科技・AI 股讯


还没有评论,来说两句吧...