用Excel实现自动获取期货、期权、股票行情及下载历史数据
距离上次发这个贴子已经过去了半年了,期间又在之前的基础上完善细化了多版,可能比下面介绍的又多了些功能,如果要看新的成品的演示和获取软件程序,这里就总结在开头,如果想看细节,请直接下滑:
股票行情、基本面、财报、历史数据批量下载器:https://www.bilibili.com/video/BV12T4y1h7Fd/
股票资金流向历史分时资金下载器:https://www.bilibili.com/video/BV1ma411v7FM/
股票国家队持股下载器:https://www.bilibili.com/video/BV1E541117ei/
股票历史分价表下载器:https://www.bilibili.com/video/BV1cu411r7qp/
股票高频Tick历史数据下载器:https://www.bilibili.com/video/BV16g411S7nU/
股票历史市盈率下载器:https://www.bilibili.com/video/BV1fr4y1u7kY/
期货期权行情及历史数据下载器:https://www.bilibili.com/video/BV1sS4y1C7GU/
期货成交持仓龙虎榜下载器:https://www.bilibili.com/video/BV1ES4y1h7mk/
——————分割线20220917——————
最初诞生VBA网抓的想法,还是因为自己炒股想要更快速获取信息,又不想买费用高昂的券商软件。后来调查发现,其实Python才是最出名的爬虫制作工具,但是要安装环境,最后做出来又只能在自己电脑上用,通用性不太强,所以就把目光对准了使用Excel或者VBA网抓。
(一)使用Excel自带的Power Query获取网页表格
如果一个方法能解决现有需求,说实话,我是没有动力去找第二个方法的。在使用VBA网抓之前,我就已经开始使用Excel的Poewr Query在做股票信息分析,最开始用的Power Query的“新建查询”功能,从网页获取表格数据(具体方法可以参考:https://finance.sina.com.cn/tech/2021-05-06/doc-ikmyaawc3588981.shtml),可以直接更新到Excel表格中。数据源当时选取的是中财网数据引擎(https://data.cfi.cn/cfidata.aspx),不得不说这个网站真的对使用Excel自动网页数据源获取真的非常友好,因为都是可以识别的表格形式数据。更新Excel后是这个样子。之后利用简单学习的Power Query操作就可以快速清洗并分析处理大量数据。
![](/assets/blank.gif)
然而,后来其实发现了这个方法的局限性,就是对数据源要求太高了,很多网站的表格数据,用Excel导入网站数据源的形式识别不了,而且我想要的股票或者期货历史数据,也不在这个网站中。并且Power Query这个方法,WPS是不支持的。这样无奈最后放弃了这个思路,开始探索真正的VBA网抓实现方法。
(二)Excel VBA 实现期货行情获取及历史数据下载
第一步,选择数据源。如果是用Python网抓,其实数据源是非常好找的,网上很多都是为Python开放的接口,开发者甚至都不需要找源网页,直接用各种接口提供的现成的结构化数据就可以,连数据处理的步骤都省略了。然而,毕竟还有很多人像我一样,电脑上没有Python,电脑上更不会去安装Python库(这些现成的接口都需要在电脑上安装Python库),或者说不希望看到换了电脑软件就用不了的情况,所以数据源还是选择通用一点的。经过调研中国的期货市场情况后,发现其实获取数据只要从四大交易所(郑州、大连、上海、中国金融期货交易所)官网获取就可以了,这些网站都提供有下载链接和一键下载的功能。然而,在后续分析html请求和响应的时候,最让我这个强迫症患者接受不了的情况发生了,四个交易所里面,三个可以抓,一个有反爬虫抓不了。。。这样还得再找其余的接口,不行,接受不了!后来发现,新浪接口真是个宝贝,四个交易所都包括了,好的就决定分析这个网页,然后抓取,成功!附新浪接口链接(需要自行分析这个网页,找到适用的名称规则并简化):
实时行情:http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
历史数据:https://vip.stock.finance.sina.com.cn/q/view/vFutures_History.php?jys=czce&pz=AP&hy=AP0&breed=AP0&type=inner&start=2021-11-23&end=2021-12-23
第二步,代码实现。VBA网抓入门可以参考B站的一位UP主发布的免费教程(链接https://www.bilibili.com/video/BV1uJ411t7hY/)在这次抓取期货时,先分析的新浪财经的网页,发现这个接口并不复杂,可以直接用Winhttp请求,然后用正则表达式处理返回数据即可。核心代码如下:
发送请求部分
![](/assets/blank.gif)
正则表达式匹配及写入数组部分
![](/assets/blank.gif)
需要注意的是,在更新产品行情时,产品的名称网抓返回的是unicode码,所以还需要额外将其转为汉字,这部分编写了一个自定义函数,代码如下:
![](/assets/blank.gif)
网抓的部分还有一个需要注意的就是对返回json格式数据的处理。其实VBA可以引用script组件,实现对json数据的快捷方便的解析,而且引用此类组件解析json,自动会实现unicode转汉字。但是此类方法测试中wps运行正常,但是有的excel会报错,说是缺少ActiveX控件的429错误,这个就不好解决了。一般这类错误不是excel版本导致的,大概率是没有完整安装,或者同时安装wps及office导致某些系统组件注册失败。这种错误通过修改代码解决不了(除非更改代码逻辑,不调用其余组件),是系统的问题,例如注册表项受损、操作系统的文件被删除、安装了不完整的excel、系统文件受损等。所以最后为了增加兼容性,避免此类错误,又重新修改了代码,不用script组件解析json,而是用正则表达式。
网抓后,简单写一些数据处理的函数公式,以及设计了两种存储模式(存储到当前工作簿,或新建工作簿),这样软件功能就算是完整了。计算日期的时候,excel自带的workday函数非常好用。
第三步,交互窗体。最后设计了一个用于数据输入的交互窗体,代码的话主要就是用到了inputbox方法,核心代码及界面如下:
软件地址:https://item.taobao.com/item.htm?ft=t&id=664624608973
用类似的方法实现股票信息获取的教程,可以参考我的另一篇文章以股票历史数据抓取为例,浅谈踩过的VBA网抓的“坑” - 知乎
用Excel实现自动获取期货、期权、股票行情及下载历史数据相关推荐
- 干货全拿走-用Excel实现自动获取基金行情及下载历史数据
这一篇是对我之前股票和期货网抓的补充,如对股票和期货抓取感兴趣,可以参考我的上篇文章:用Excel实现自动获取期货.期权.股票行情及下载历史数据 - 知乎.在做完股票和期货的网抓后,感觉基金也可以一试 ...
- ChatGPT炒股:自动获取某只股票最新新闻报道
炒股,肯定要看某个股票的相关新闻,这是最基础的线上调研.百度新闻相对比较全面,如何通过ChatGPT来自动获取某个股票的百度新闻报道呢? 首先,在百度新闻搜索页面,观察翻页的规律: 第二页: http ...
- MSN Money Stock Quotes--Excel获取国内外实时股票行情--将股票报价数据插入工作区
具体参考 http://quanthr.com/bbs/thread-2735-1-1.html 将股票报价数据插入工作区 适用于: Microsoft Office Excel 2003, OneN ...
- 如何获取新浪股票行情查询接口?
我们在进行量化交易时,都需要用到大量的股票行情数据,这时候我们可以通过网络上一些公开的行情查询平台拿到这些数据,一般来讲新浪.东方财富.同花顺都是不错的行情查询平台.为了更好地进行交易,我们还需要拿到 ...
- php 获取新浪股票行情数据,python 抓取新浪财经股票数据
新浪并未提供API,但我们可以通过抓包来获取实时或历史行情数据. 实时行情 比如我们可以通过浏览器访问: ?== 来获取证券代码为的实时行情数据,可以看到内容为: ="华泰证券,,,,20. ...
- python抓取股票数据_Python自动获取当日所有股票数据
开年以来,大盘直接从2400站上了3200,为了后续进一步分析股票数据,我想把每只股票每天的数据保存下来. import pandas as pd import tushare as ts impor ...
- 若依@Excel注解自动获取导出字段,字典解析
若依系统中实体类导出字段使用了@Execl 若不是若依系统 最后附有excel接口 如导出加上@Excel(name = "字段名") 需要导出数值的中文解析 则加上dictTyp ...
- python自动炒股软件下载_Python自动获取当日所有股票数据
开年以来,大盘直接从2400站上了3200,为了后续进一步分析股票数据,我想把每只股票每天的数据保存下来. import pandas as pd import tushare as ts impor ...
- 风火编程--python获取单只股票实时数据和历史数据
获取股票数据 这本来是专门为我的一个单一选股模型提供数据的类, 因此封装的只是模型中需要的数据. 如有其它需求可以自己扩展. 积分多的可以下载文件, 没积分的直接复制下面的代码是一样的. 代码不复杂, ...
最新文章
- java newline_Java BufferedWriter.newLine()方法示例
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)
- 37 SD配置-销售凭证设置-分配项目类别
- 给fiddle 解密_fiddler学习笔记2 字段说明;移动设备、解密证书
- c++ primer课后题答案 第9章 : 顺序容器
- LOCK TABLES
- Java中文件路径的写法
- 探索软件设计模式(二)
- python3 自定义排序_Python3中的自定义排序
- python写脚本的优势_python写脚本的优势玩被叫
- oracle clob 导出csv,在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法...
- Windows 8实用窍门系列:11.Windows 8 中的Toast Tile Badge通知
- 操作系统实验及代码(全)
- 运筹学 知识点总结 (十一)
- 数据分析之参数检验与非参数检验
- JAVA8安装与配置
- usb驱动开发21——驱动生命线
- sketch和zeplin
- html中qq号码怎么写,根据QQ头像hash分析QQ号(html版)
- 【JZOJ100209】【20190705】狂妄之人
热门文章
- GDB常用调试命令以及多进程多线程调试
- Java实习生第一天及未来规划
- Word文件的限制编辑如何停止保护
- 官方文档链接(Core Graphics、View Controller、UICollectionView、UITableView、第三方库)
- 物体方位判断以及上坡/下坡道路坡度计算
- 携手沙溢背后,土巴兔正引领家装走向数智化
- 计算机中软盘硬盘都有吗,软盘、硬盘、磁盘和内存的区别与联系
- java validate_java 常用验证,手机号、固话、邮箱、工具类 ValidateUtil
- 共建手机页游生态圈 腾讯助力Cocos秋季峰会
- MySQL笔记8--有关查询(9简略)