如何用 Python 获取实时的股票数据?

article/2025/9/14 6:10:54

这个我会!先上图

这篇回答中,我将向你展示两种不同的代码版本(加强版和一般版)

代码运行环境说明(非常重要)

Python版本要求

Python 3

 需要安装的库

efinance

库的安装方法是:打开 cmd(命令提示符或者其他终端工具),输入以下代码

pip install efinance

输入完毕,按 Enter 键执行代码,等待 successfully 出现即可

代码展示

加强版代码

这一部分基于我开发的 python 库 efinance

根据股票代码获取最新第一个交易日的分钟数据

# 导入 efinance 如果没有安装则需要通过执行命令: pip install efinance 来安装
import efinance as ef
# 股票代码
stock_code = '600519'
# 数据间隔时间为 1 分钟
freq = 1
# 获取最新一个交易日的分钟级别股票行情数据
df = ef.stock.get_quote_history(stock_code, klt=freq)
# 将数据存储到 csv 文件中
df.to_csv(f'{stock_code}.csv', encoding='utf-8-sig', index=None)
print(f'股票: {stock_code} 的行情数据已存储到文件: {stock_code}.csv 中!')

根据股票名称获取最新第一个交易日的分钟数据(支持A股、美股、港股)

# 导入 efinance 如果没有安装则需要通过执行命令: pip install efinance 来安装
import efinance as ef
# 股票名称
stock_code = '微软'
# 数据间隔时间为 1 分钟
freq = 1
# 获取最新一个交易日的分钟级别股票行情数据
df = ef.stock.get_quote_history(stock_code, klt=freq)
# 将数据存储到 csv 文件中
df.to_csv(f'{stock_code}.csv', encoding='utf-8-sig', index=None)
print(f'股票: {stock_code} 的行情数据已存储到文件: {stock_code}.csv 中!')

每间隔 1 分钟获取一次单只股票分钟行情数据

# 导入 efinance 如果没有安装则需要通过执行命令: pip install efinance 来安装
import efinance as ef
import time
from datetime import datetime
# 股票代码
stock_code = '600519'
# 数据间隔时间为 1 分钟
freq = 1
status = {stock_code: 0}
while 1:# 获取最新一个交易日的分钟级别股票行情数据df = ef.stock.get_quote_history(stock_code, klt=freq)# 现在的时间now = str(datetime.today()).split('.')[0]# 将数据存储到 csv 文件中df.to_csv(f'{stock_code}.csv', encoding='utf-8-sig', index=None)print(f'已在 {now}, 将股票: {stock_code} 的行情数据存储到文件: {stock_code}.csv 中!')if len(df) == status[stock_code]:print(f'{stock_code} 已收盘')breakstatus[stock_code] = len(df)print('暂停 60 秒')time.sleep(60)print('-'*10)print('全部股票已收盘')

每间隔 1 分钟获取一次多只股票分钟行情数据# 导入 efinance 如果没有安装则需要通过执行命令: pip

install efinance 来安装
import efinance as ef
import time
from datetime import datetime
# 股票代码或者名称列表
stock_codes = ['600519', '腾讯', 'AAPL']
# 数据间隔时间为 1 分钟
freq = 1
status = {stock_code: 0 for stock_code in stock_codes}
while len(stock_codes) != 0:for stock_code in stock_codes.copy():# 现在的时间now = str(datetime.today()).split('.')[0]# 获取最新一个交易日的分钟级别股票行情数据df = ef.stock.get_quote_history(stock_code, klt=freq)# 将数据存储到 csv 文件中df.to_csv(f'{stock_code}.csv', encoding='utf-8-sig', index=None)print(f'已在 {now}, 将股票: {stock_code} 的行情数据存储到文件: {stock_code}.csv 中!')if len(df) == status[stock_code]:# 移除已经收盘的股票代码stock_codes.remove(stock_code)print(f'股票 {stock_code} 已收盘!')status[stock_code] = len(df)if len(stock_codes) != 0:print('暂停 60 秒')time.sleep(60)print('-'*10)print('全部股票已收盘')

每间隔 1 分钟获取一次多只股票分钟行情数据(高速版)# 导入 efinance 如果没有安装则需要通过执行

命令: pip install efinance 来安装
from typing import Dict
import efinance as ef
import pandas as pd
import time
from datetime import datetime
# 股票代码或者名称列表
stock_codes = ['600519', '腾讯', 'AAPL']
# 数据间隔时间为 1 分钟
freq = 1
status = {stock_code: 0 for stock_code in stock_codes}
while len(stock_codes) != 0:# 获取最新一个交易日的分钟级别股票行情数据stocks_df: Dict[str, pd.DataFrame] = ef.stock.get_quote_history(stock_codes, klt=freq)for stock_code, df in stocks_df.items():# 现在的时间now = str(datetime.today()).split('.')[0]# 将数据存储到 csv 文件中df.to_csv(f'{stock_code}.csv', encoding='utf-8-sig', index=None)print(f'已在 {now}, 将股票: {stock_code} 的行情数据存储到文件: {stock_code}.csv 中!')if len(df) == status[stock_code]:# 移除已经收盘的股票代码stock_codes.remove(stock_code)print(f'股票 {stock_code} 已收盘!')status[stock_code] = len(df)if len(stock_codes) != 0:print('暂停 60 秒')time.sleep(60)print('-'*10)print('全部股票已收盘')

以上演示了如何使用我开发的 python 库来获取最新一个交易日内股票的分钟级股票数据

下面是更加底层的版本(功能比较少,仅支持 A 股)

一般版

获取当日分钟线数据

from urllib.parse import urlencode
import pandas as pd
import requests
def gen_eastmoney_code(rawcode: str) -> str:'''生成东方财富专用的secidParameters----------rawcode : 6 位股票代码Parameters----------str : 按东方财富格式生成的字符串 '''if rawcode[0] != '6':return f'0.{rawcode}'return f'1.{rawcode}'
def get_k_history(code: str, beg: str = '16000101', end: str = '20500101', klt: int = 1, fqt: int = 1) -> pd.DataFrame:'''功能获取k线数据Parameters----------code : 6 位股票代码beg: 开始日期 例如 20200101end: 结束日期 例如 20200201klt: k线间距 默认为 101 即日kklt:1 1 分钟klt:5 5 分钟klt:101 日klt:102 周fqt: 复权方式不复权 : 0前复权 : 1后复权 : 2 Return------DateFrame : 包含股票k线数据'''EastmoneyKlines = {'f51': '时间','f52': '开盘','f53': '收盘','f54': '最高','f55': '最低','f56': '成交量','f57': '成交额','f58': '振幅','f59': '涨跌幅','f60': '涨跌额','f61': '换手率',}EastmoneyHeaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Referer': 'http://quote.eastmoney.com/center/gridlist.html',}fields = list(EastmoneyKlines.keys())columns = list(EastmoneyKlines.values())fields2 = ",".join(fields)secid = gen_eastmoney_code(code)params = (('fields1', 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13'),('fields2', fields2),('beg', beg),('end', end),('rtntype', '6'),('secid', secid),('klt', f'{klt}'),('fqt', f'{fqt}'),)base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get'url = base_url+'?'+urlencode(params)json_response = requests.get(url, headers=EastmoneyHeaders).json()data = json_response['data']# code = data['code']# 股票名称# name = data['name']klines = data['klines']rows = []for _kline in klines:kline = _kline.split(',')rows.append(kline)df = pd.DataFrame(rows, columns=columns)return df
if __name__ == "__main__":# 股票代码code = '600519'# 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据df = get_k_history(code)# 保存k线数据到表格里面df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None)print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')

获取当日分钟线数据(每分钟运行一次,直到收盘)from urllib.parse import urlencode

import pandas as pd
import requests
import time
def gen_eastmoney_code(rawcode: str) -> str:'''生成东方财富专用的secidParameters----------rawcode : 6 位股票代码Parameters----------str : 按东方财富格式生成的字符串 '''if rawcode[0] != '6':return f'0.{rawcode}'return f'1.{rawcode}'
def get_k_history(code: str, beg: str = '16000101', end: str = '20500101', klt: int = 1, fqt: int = 1) -> pd.DataFrame:'''功能获取k线数据Parameters----------code : 6 位股票代码beg: 开始日期 例如 20200101end: 结束日期 例如 20200201klt: k线间距 默认为 101 即日kklt:1 1 分钟klt:5 5 分钟klt:101 日klt:102 周fqt: 复权方式不复权 : 0前复权 : 1后复权 : 2 Return------DateFrame : 包含股票k线数据'''EastmoneyKlines = {'f51': '时间','f52': '开盘','f53': '收盘','f54': '最高','f55': '最低','f56': '成交量','f57': '成交额','f58': '振幅','f59': '涨跌幅','f60': '涨跌额','f61': '换手率',}EastmoneyHeaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Referer': 'http://quote.eastmoney.com/center/gridlist.html',}fields = list(EastmoneyKlines.keys())columns = list(EastmoneyKlines.values())fields2 = ",".join(fields)secid = gen_eastmoney_code(code)params = (('fields1', 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13'),('fields2', fields2),('beg', beg),('end', end),('rtntype', '6'),('secid', secid),('klt', f'{klt}'),('fqt', f'{fqt}'),)base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get'url = base_url+'?'+urlencode(params)json_response = requests.get(url, headers=EastmoneyHeaders).json()data = json_response['data']# code = data['code']# 股票名称# name = data['name']klines = data['klines']rows = []for _kline in klines:kline = _kline.split(',')rows.append(kline)df = pd.DataFrame(rows, columns=columns)return df
if __name__ == "__main__":# 重复 1000 次for _ in range(1000):# 股票代码code = '600519'# 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据df = get_k_history(code)# 保存k线数据到表格里面df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None)print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')time.sleep(60)# 240 行说明收盘了,结束if len(df) >= 240:break

零基础Python学习资源及经验总结

如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,我也为大家整理了一份【最新全套Python学习资料】一定对你有用!

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的!

1、学习时间相对较短,学习内容更全面更集中

2、可以找到适合自己的学习方案

这份资料包含:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程,带你从零开始系统性的学好Python!

点击免费领取《CSDN大礼包》:

最新全套【Python入门到进阶资料 & 实战源码 & 安装工具】https://mp.weixin.qq.com/s/9IuSexhanYZ1TMAF1MZIhw

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python课程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

img

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

img

四、清华编程大佬出品《漫画看学Python》

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

img

五、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、互联网企业面试真题

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

这份完整版的Python全套学习资料已经上传至CSDN官方,朋友们如果需要可以点击下方链接费获取【保证100%免费】

点击免费领取《CSDN大礼包》:

最新全套【Python入门到进阶资料 & 实战源码 & 安装工具】https://mp.weixin.qq.com/s/9IuSexhanYZ1TMAF1MZIhw

以上全套资料已经为大家打包准备好了,希望对正在学习Python的你有所帮助!


如果你觉得这篇文章有帮助,可以点个赞呀~

我会坚持每天更新Python相关干货,分享自己的学习经验帮助想学习Python的朋友们少走弯路!


http://chatgpt.dhexx.cn/article/7RQCqGbj.shtml

相关文章

怎么用Python获取股票的实时数据?

学习目标: 应用industry实现行业股票列表的获取应用history_bars实现股票合约历史行情数据获取应用get_fundamentals实现股票基本面数据获取使用query的过滤条件完成股票数据的过滤应用scheduler定时器实现股票数据定期获取 1、 数据接口种类 获取指定行业、板块…

SAP UI5 Focus related

tap, keydown, keypresssap.ui.core.FocusHandlersap.ca.scfld.md.app.CommonHeaderFooterHelperevent new jQuery.Event(originalEvent);focusin, activate, blur, focusout, sapfocusleaveoElement._handleEvent(oEvent); 要获取更多Jerry的原创…

Consider defining a bean of type ‘com.qf.user.consumer.feign.api.UserFeignAPI‘ in your configuration

Consider defining a bean of type ‘com.qf.user.consumer.feign.api.UserFeignAPI’ in your configuration… 引导类加注解EnableFeignClients

Prime算法 C++实现

Prime算法 算法介绍: 课本实现方法: 先从最小堆说起(heap):任一结点的关键码均小于或等于它的左右子女的关键码,位于堆顶(即完全二叉树的根结点的位置)的结点的关键码是整个集合中最…

【数学】Prime-Factor Prime

Prime-Factor Prime 题目描述 A positive integer is called a "prime-factor prime" when the number of its prime factors is prime. For example, 12 is a prime-factor prime because the number of prime factors of 12223 is 3, which is prime. On the other…

Prime Factory (Training, Math)

Prime Factory (Training, Math) 题目描述 Your task is simple: Find the first two primes above 1 million, whose separate digit sums are also prime. As example take 23, which is a prime whose digit sum, 5, is also prime. The solution is the concatination of t…

Fiori Fundamentals和SAP UI5 Web Components

这周有位同事邀请我给团队讲一讲SAP技术的演进历史,所以我准备了下面几个主题来介绍。 其中SAP的技术回顾和演进,我的思路就是从前后台两方面分别介绍。 我画了一张非常简单的图: 去年5月我写过一篇文章:SAP UI和Salesforce UI开…

C++Prime Plus(3)

目录 51.抽象和类52.类的使用53.对象构造54.对象析构55.const与类56.this指针57.类作用域58.运算符重载59.运算符重载的实例60.友元61.运算符重载-成员或非成员62.类的类型转换63.拷贝构造函数与赋值运算符重载64.静态数据成员65.静态成员函数 51.抽象和类 类型的构成 1.数据占…

C++Prime Plus(6)

目录 92.STL(1)容器93.STL(2)迭代器94.STL(3)函数对象95.STL(4)算法 92.STL(1)容器 标准模板库 STL(Standard Template Library),是 C 标准库的一部分,不需要单独安装,只需要#include 头文件。STL提供了容器&#xff…

C++Prime Plus(5)

目录 85.异常(1)异常处理机制86.异常(2)exception类87.RTTI(1)88.RTTI(2)89.类型转换运算符90.string类91.智能指针 85.异常(1)异常处理机制 异常:运行错误(比如无法打开文件,动态内存申请失败),导致程序无法继续正常…

SAP Fiori学习笔记

资料链接:有些是需要自带梯子的哦~ Fiori Design Guidelines​experience.sap.com戴团长:SAP Fiori Design​zhuanlan.zhihu.com如何评价 SAP Fiori Design Guidelines?​www.zhihu.comhttps://mp.weixin.qq.com/s?__bizMzIyNjY…

C++Prime Plus(2)

目录 21.for循环(1)22.for循环(2)23.while循环24.do while循环25.二维数组与嵌套循环26.if语句27.逻辑表达式28.条件表达式29.switch语句30.文件概念31.文本文件的输入输出32.函数详解(1)回顾33.函数详解(2)参数传递34.函数详解(3)数组传递35.函数详解(4)C风格字符串36.递归概念…

C++Prime Plus(1)

目录 1.C简介2.程序生成(创建源码,编译和链接)3.进入C4.C语句5.函数入门6.整型7.char,bool(小整数)8.const与符号常量9.浮点数10.算术表达式11.数组12.C风格字符串13.C风格字符串14.结构15.指针16.动态内存…

C++Prime Plus(7)

目录 96.输入输出概述97.使用cout输出(1)ostream基本功能98.使用cout输出(2)格式化输出99.使用cin输入100.文件(1)简单的文件IO101.文件打开的进一步讨论102.二进制文件访问103.随机读写 96.输入输出概述 C的输入输出是由库iostream中提供的一组类实现的; 流 C把输…

E-Prime软件包及安装

E-Prime软件包及安装 1 版本问题2 安装过程3 注意事项4 唠唠叨叨 Hello, 这里是行上行下,我是喵君姐姐~ 众所周知,E-Prime是实验设计的执行者。 当我们提出一个想法,则需要一个具体的软件来实现它。 而E-Prime相对于Matlab和Py…

Prime Sample

又发现了个框架 但没有代码啊~~ 还是搬来了,重要样本关注机制,一种新颖的目标检测框架 上论文 论文地址: https://arxiv.org/pdf/1904.04821.pdf 在目标检测框架中,平等对待所有样本并以平均性能最大化目标是一种常见的范例。在…

Prime Factors

此题需要使用到质因子分解的算法,可以参考以下链接: https://blog.csdn.net/qq_42410605/article/details/100150140 题目描述: Given any positive integer N,you are supposed to find all of prime factors,and write them in the form…

SpringBoot实现分布式锁

SpringBoot实现分布式锁 先了解一下线程数: 线程锁 线程锁:主要用来给类,方法,代码加锁,当某个方法或者某块代码使用synchronize关键字来修饰,那么在同一时刻最多只能有一个线程执行该代码,如…

深入理解ConcurrentHashMap原理分析以及线程安全性问题

在之前的文章提到ConcurrentHashMap是一个线程安全的,那么我么看一下ConcurrentHashMap如何进行操作的。 ConcurrentHashMap与HashTable区别? HashTable put()源代码 我们来看一下put 操作: 方法体 被 同步锁标记,由于同步锁的…

Redis分布式锁到底安全吗?

若有收获,请记得分享和转发哦 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。 Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢? 因为我发现网上 99% 的文章,并没有把这个问题真正…