Python调用东方财富接口获取股票K线数据方法
通过逆向分析东方财富行情页面的内部接口,本文介绍如何使用 Python 的 requests 库直接获取股票日线、周线等 K 线数据。文章详细拆解了 secid、klt、fqt 等核心参数的构造方法,并提供完整的请求与 JSON 解析代码,帮助开发者高效获取结构化金融时间序列数据。
原理与抓包分析
网页端通常使用 SVG 或 Canvas 绘制 K 线图形,难以直接提取数值。通过浏览器开发者工具监听 Network 面板,可观察到切换不同周期时前端会向后台发起异步数据请求。该接口直接返回 JSON 格式的历史行情,大幅降低了解析成本。

以海尔智家(sh600690)为例,核心请求链路如下:

第1步:确认接口地址与市场前缀
基础请求域名固定,所有变量均通过 Query String 传递:
http://54.push2his.eastmoney.com/api/qt/stock/kline/get
注意股票代码需拼接市场标识:上海市场前缀为 1,深圳市场为 0。
第2步:构建核心请求参数
完整参数决定了数据的周期、复权方式、时间跨度及返回字段映射。主要参数规范如下:
secid: 组合代码,如1.600690klt: 周期编码,101日线,102周线,103月线fqt: 复权状态,0不复权,1前复权,2后复权beg/end: 起止日期yyyymmdd,end默认为极远未来lmt: 单次请求最大返回条数fields1/fields2: 控制 JSON 响应的列映射表

第3步:编写 Python 请求脚本
使用 requests 模块拼装 URL。为避免触发基础反爬,建议补充 User-Agent 与 Referer 头部:

import requests
url = "http://54.push2his.eastmoney.com/api/qt/stock/kline/get"
params = {
"secid": "1.600690",
"ut": "fa5fd1943c7b386f172d6893dbfba10b",
"fields1": "f1,f2,f3,f4,f5,f6",
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
"klt": "102",
"fqt": "1",
"beg": "0",
"end": "20500101",
"smplmt": "460",
"lmt": "1000000"
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Referer": "https://quote.eastmoney.com/"
}
res = requests.get(url, params=params, headers=headers)
data = res.json()
print(data)

第4步:提取并验证数据结构
返回的 JSON 中,K 线明细位于 data["data"]["klines"](具体键名视版本可能微调)。每条记录按时间顺序排列,包含日期、开高低收、成交额与涨跌幅。控制台最终输出已验证数据完整性:

拿到数据后,可直接使用 pandas.read_csv() 或字典推导式清洗为 DataFrame,无缝对接 QuantLib 或 Backtrader 等回测引擎。
注意事项与排错
- 频率限制:未添加合理请求间隔或共用单一 IP 会导致
403拒绝。生产环境建议加入随机延时或走代理池。 - 字段映射变动:
fields1/f2对应的业务含义可能随接口迭代调整。若取出的涨跌幅或价格异常,请以最新抓包报文为准重新映射。 - 类型转换:接口返回的数值多为字符串类型,计算前需使用
float()强转,避免隐式类型错误。 - 合规使用:该通道面向 C 端用户展示,严禁用于高频交易指令触发或商业数据转售。机构级应用请采购持牌交易所授权源。
总结
通过直接调用行情内部接口,可绕过前端图表渲染层,稳定获取包含 OHLCV 要素的标准时间序列数据。掌握参数拼装逻辑与响应解析流程后,能够显著缩短数据采集链路,为量化策略研发提供可靠的基础层支撑。以上就是Python调用东方财富接口获取股票K线数据的详细内容,更多关于Python量化数据获取的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













