前言

玩过股票的几乎都知道,股票历史交易日的开盘价、收盘价、最高价、最低价等指标是选股的重要依据。虽然仅仅依靠它们无法在股市中盆满钵满,但是运用好它确实能在较大程度提高我们的赚钱概率

当前的金融数据查看工具确实够多,例如东方财富、同花顺等知名财经网站。它们的数据很全,但是集成程度太高了,难以满足每个人的个性化需求。比如说我以A股的4000多只股票为研究对象,想研究它们的历史日k线数据,那么导出这么多数据无疑是一个巨大的工程。并且这些财经网站可能并不会给免费用户提供批量导出数据的功能。

这个时候还想获取这些数据怎么办呢?冲会员当然是一个选择,不过这样子还是容易受制于人,即使是会员,个性化程度还是不够高。

为了解决“股票k线数据难以个性化导出”这个问题,我们可以尝试使用 Python 对财经网站进行爬虫以获取源数据,再从里面提取出我们需要的信息,比如本次的k线数据,之后再保存到表格文件里面。

开始之前

Python版本要求

Python 3

如果没有安装 Python,可以参考我写的这篇安装教程

Win下快速搭建Python编程环境67 赞同 · 19 评论文章正在上传…重新上传取消

需要安装的库

pandas
requests

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

pip install pandas requests

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

代码展示

需求 1 描述

获取 代码为 600519 这只股票从 2020年1月1日 到 2020年11月1日 的k线数据并将数据保存到以股票代码命名的csv文件中,例如 600519.csv

示例代码 1

from urllib.parse import urlencode
import pandas as pd
import requestsdef gen_secid(rawcode: str) -> str:'''生成东方财富专用的secidParameters----------rawcode : 6 位股票代码Return------str: 指定格式的字符串'''# 沪市指数if rawcode[:3] == '000':return f'1.{rawcode}'# 深证指数if rawcode[:3] == '399':return f'0.{rawcode}'# 沪市股票if rawcode[0] != '6':return f'0.{rawcode}'# 深市股票return f'1.{rawcode}'def get_k_history(code: str, beg: str, end: str, klt: int = 101, fqt: int = 1) -> pd.DataFrame:'''功能获取k线数据-参数code : 6 位股票代码beg: 开始日期 例如 20200101end: 结束日期 例如 20200201klt: k线间距 默认为 101 即日kklt:1 1 分钟klt:5 5 分钟klt:101 日klt:102 周fqt: 复权方式不复权 : 0前复权 : 1后复权 : 2 '''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_secid(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}'),)params = dict(params)base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get'url = base_url+'?'+urlencode(params)json_response: dict = requests.get(url, headers=EastmoneyHeaders).json()data = json_response.get('data')if data is None:if secid[0] == '0':secid = f'1.{code}'else:secid = f'0.{code}'params['secid'] = secidurl = base_url+'?'+urlencode(params)json_response: dict = requests.get(url, headers=EastmoneyHeaders).json()data = json_response.get('data')if data is None:print('股票代码:', code, '可能有误')return pd.DataFrame(columns=columns)klines = data['klines']rows = []for _kline in klines:kline = _kline.split(',')rows.append(kline)df = pd.DataFrame(rows, columns=columns)return dfif __name__ == "__main__":# 股票代码code = '600519'# 开始日期start_date = '20200101'# 结束日期end_date = '20201101'print(f'正在获取 {code} 从 {start_date} 到 {end_date} 的 k线数据......')# 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据df = get_k_history(code, start_date, end_date)# 保存k线数据到表格里面df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None)print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')

示例代码 1 运行结果

  • 屏幕输出
正在获取 600519 从 20200101 到 20201101 的 k线数据......
股票代码:600519 的 k线数据已保存到代码目录下的 600519.csv 文件中
  • 生成一个表格文件(csv格式)

需求 2 描述

获取股票代码分别为 600519、300750 的这两只股票从 2020年1月1日 到 2020年11月1日 的k线数据并将数据保存到以股票代码命名的csv文件中

示例代码 2

from urllib.parse import urlencode
import pandas as pd
import requestsdef gen_secid(rawcode: str) -> str:'''生成东方财富专用的secidParameters----------rawcode : 6 位股票代码Return------str: 指定格式的字符串'''# 沪市指数if rawcode[:3] == '000':return f'1.{rawcode}'# 深证指数if rawcode[:3] == '399':return f'0.{rawcode}'# 沪市股票if rawcode[0] != '6':return f'0.{rawcode}'# 深市股票return f'1.{rawcode}'def get_k_history(code: str, beg: str, end: str, klt: int = 101, fqt: int = 1) -> pd.DataFrame:'''功能获取k线数据-参数code : 6 位股票代码beg: 开始日期 例如 20200101end: 结束日期 例如 20200201klt: k线间距 默认为 101 即日kklt:1 1 分钟klt:5 5 分钟klt:101 日klt:102 周fqt: 复权方式不复权 : 0前复权 : 1后复权 : 2 '''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_secid(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}'),)params = dict(params)base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get'url = base_url+'?'+urlencode(params)json_response: dict = requests.get(url, headers=EastmoneyHeaders).json()data = json_response.get('data')if data is None:if secid[0] == '0':secid = f'1.{code}'else:secid = f'0.{code}'params['secid'] = secidurl = base_url+'?'+urlencode(params)json_response: dict = requests.get(url, headers=EastmoneyHeaders).json()data = json_response.get('data')if data is None:print('股票代码:', code, '可能有误')return pd.DataFrame(columns=columns)klines = data['klines']rows = []for _kline in klines:kline = _kline.split(',')rows.append(kline)df = pd.DataFrame(rows, columns=columns)return dfif __name__ == "__main__":# 股票代码列表codes = ['600519','300750']# 开始日期start_date = '20200101'# 结束日期end_date = '20201101'for code in codes:print(f'正在获取 {code} 从 {start_date} 到 {end_date} 的 k线数据......')# 根据股票代码、开始日期、结束日期获取指定股票代码指定日期区间的k线数据df = get_k_history(code, start_date, end_date)# 保存k线数据到表格里面df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None)print(f'股票代码:{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')

示例代码 2 运行结果

  • 屏幕输出
正在获取 600519 从 20200101 到 20201101 的 k线数据......
股票代码:600519 的 k线数据已保存到代码目录下的 600519.csv 文件中
正在获取 300750 从 20200101 到 20201101 的 k线数据......
股票代码:300750 的 k线数据已保存到代码目录下的 300750.csv 文件中
  • 在代码运行目录生成两个csv文件
  • 表格内容展示(其中的一个表格)

写在最后

本篇文章展示了如何使用python获取并保存1只以及多只股票的历史日k线数据到表格文件中,当然代码不仅限于获取日k数据,诸如 5 分钟,1分钟等数据均是可以获取的,具体如何实现可以看代码里面的注释信息,这里不过多描述。实在搞不懂的可以私信我提供帮助。感谢大家阅读!

更加强大的版本在下面

顺手牵羊:免费、快速获取基金、股票、期货数据:基于我独立开发的 Python 库 efinance188 赞同 · 375 评论文章正在上传…重新上传取消

Python 获取股票K线数据相关推荐

  1. [股票预测]获取股票K线数据

    目 录 2.2 获取K线函数get_k_data() 2.2.1获取最近一年K线数据 (1)数据集(XRHJ000598_OneYear.csv) (3)程序代码 2.2.2 获取指定时间段K线数据 ...

  2. Python绘制股票K线图

    目录 1 股票K线图知识了解 2 用Python绘制股票K线图 2.1 安装绘制K线图的mpl_finance库 2.2 引入相关库 2.3 用Tushare库获取股票基本数据 2.4 日期格式调整及 ...

  3. pandas - 股票K线数据重采样

    1 股票K线图 K线图这种图表源处于日本德川幕府时代,被当时日本米市的商人用来记录米市的行情与价格波动,后因其细腻独到的标画方式而被引入到股市及期货市场. 1.1 K线图基本形态 1.2 K线图的计算 ...

  4. 使用Python获取股票单日成交数据

    本文主要介绍一个比较好的开源项目 Github:AKShare开源财经数据接口,该项目整合了各大财经网站的http接口:腾讯财经.新浪财经.网易财经.东财等....Github上介绍该项目是JetBr ...

  5. 使用Python生成股票K线图

    可视化股票数据,这里只做简单的处理,只显示k线图.选取的是海通证券(600837)2020年1月1日之后150个交易日的数据.这里代码不多,没有封装成方法,代码如下.数据是提前获取的,获取方法见:使用 ...

  6. 太酷炫了,用python绘制股票K线图!

    大家好,我是小五 发现大家还是最喜欢股票基金话题呀~ 那说到股票基金就不得不提--K线图! 那小五今天就带大家???? 用python来轻松绘制高颜值的K线图???? 获取股票交易数据 巧妇难为无米之 ...

  7. R语言 | 利用tushare获取股票k线、市值、换手率,市盈率等指标

    作者的tushare ID:456548 作者在股市进行比较短线的投资,想开发一些高效的指标作为买卖的参考,于是需要k线.市值.换手率等数据进行研究,同花顺等软件上面大多数据不能导出,所以找到了tus ...

  8. 使用 Python 生成股票 K 线图

    引言 在股票分析中,经常需要用到 K 线图来分析股票的价格波动情况和交易量情况.本文将介绍如何使用 Python 和 pyecharts 库生成股票 K 线图,并将其保存为 HTML 文件. 准备数据 ...

  9. 使用Python获取股票的报表数据

    本文使用网易财经http接口获取股票的报表数据,包括主要财务指标.资产负债表.利润表.现金流表.获取股票数据请参考使用Python获取股票实时数据和历史数据. 网易财经http接口发回来的是csv文件 ...

最新文章

  1. Qt 事件处理和事件过滤器的返回值总结
  2. jquery版本冲突问题
  3. 阿里云 物联网产品架构
  4. Apache服务器的WSASocket failed to open the inherited socket错误
  5. ES学习笔记之-AvgAggregation的实现过程分析
  6. python详细安装教程3.8-python3.8下载及安装步骤详解
  7. C++运算符重载(成员函数方式)
  8. CodeIgniter2.0中sqlserver驱动返回受影响行数问题解决
  9. TreeMap方法源码
  10. 【转载】Linux下有趣的命令
  11. 数学 之 hdu 4861
  12. ajax请求携带tooken_9 HTMLJS等前端知识系列之Ajax post请求带有token向Django请求
  13. (45)Xilinx Counter IP核配置(六)(第9天)
  14. 阻止电脑自动安装软件_坡解版wetool 安装条件-购买-老友网
  15. idea java 桌面应用_IDEA打包应用程序的教程图解
  16. 使用envi对图像进行对比度拉伸并保存
  17. 双层板在哪层覆铜_2020年中国印制电路板行业发展现状及发展趋势预测(图)...
  18. EFResume - 一个普通的 Swift 简历模板
  19. office插件开发_OneKeyTools:强大PPT插件
  20. 编译原理-语法分析详解

热门文章

  1. 前端必备网站(纯手工输入)
  2. MATLAB 迷宫游戏
  3. 直接在服务器上跑系统,在服务器上跑代码
  4. 技嘉显卡性能测试软件,性能测试成绩总结_技嘉 GA-G1.Sniper B5_主板评测-中关村在线...
  5. 家用计算机长期不关机的后果,长时间不关机对电脑有什么影响
  6. LVGL 8.2.0 Stacked area chart
  7. 《拍拍二手》微信小程序开发经验谈
  8. C语言 随机数实现猜拳游戏
  9. Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取,多附件发送)
  10. AlignedReID: Surpassing Human-Level Performance in Person Re-Identification