距离上次发这个贴子已经过去了半年了,期间又在之前的基础上完善细化了多版,可能比下面介绍的又多了些功能,如果要看新的成品的演示和获取软件程序,这里就总结在开头,如果想看细节,请直接下滑:

股票行情、基本面、财报、历史数据批量下载器: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操作就可以快速清洗并分析处理大量数据。

然而,后来其实发现了这个方法的局限性,就是对数据源要求太高了,很多网站的表格数据,用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请求,然后用正则表达式处理返回数据即可。核心代码如下:

发送请求部分

正则表达式匹配及写入数组部分

需要注意的是,在更新产品行情时,产品的名称网抓返回的是unicode码,所以还需要额外将其转为汉字,这部分编写了一个自定义函数,代码如下:

网抓的部分还有一个需要注意的就是对返回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实现自动获取期货、期权、股票行情及下载历史数据相关推荐

  1. 干货全拿走-用Excel实现自动获取基金行情及下载历史数据

    这一篇是对我之前股票和期货网抓的补充,如对股票和期货抓取感兴趣,可以参考我的上篇文章:用Excel实现自动获取期货.期权.股票行情及下载历史数据 - 知乎.在做完股票和期货的网抓后,感觉基金也可以一试 ...

  2. ChatGPT炒股:自动获取某只股票最新新闻报道

    炒股,肯定要看某个股票的相关新闻,这是最基础的线上调研.百度新闻相对比较全面,如何通过ChatGPT来自动获取某个股票的百度新闻报道呢? 首先,在百度新闻搜索页面,观察翻页的规律: 第二页: http ...

  3. MSN Money Stock Quotes--Excel获取国内外实时股票行情--将股票报价数据插入工作区

    具体参考 http://quanthr.com/bbs/thread-2735-1-1.html 将股票报价数据插入工作区 适用于: Microsoft Office Excel 2003, OneN ...

  4. 如何获取新浪股票行情查询接口?

    我们在进行量化交易时,都需要用到大量的股票行情数据,这时候我们可以通过网络上一些公开的行情查询平台拿到这些数据,一般来讲新浪.东方财富.同花顺都是不错的行情查询平台.为了更好地进行交易,我们还需要拿到 ...

  5. php 获取新浪股票行情数据,python 抓取新浪财经股票数据

    新浪并未提供API,但我们可以通过抓包来获取实时或历史行情数据. 实时行情 比如我们可以通过浏览器访问: ?== 来获取证券代码为的实时行情数据,可以看到内容为: ="华泰证券,,,,20. ...

  6. python抓取股票数据_Python自动获取当日所有股票数据

    开年以来,大盘直接从2400站上了3200,为了后续进一步分析股票数据,我想把每只股票每天的数据保存下来. import pandas as pd import tushare as ts impor ...

  7. 若依@Excel注解自动获取导出字段,字典解析

    若依系统中实体类导出字段使用了@Execl 若不是若依系统 最后附有excel接口 如导出加上@Excel(name = "字段名") 需要导出数值的中文解析 则加上dictTyp ...

  8. python自动炒股软件下载_Python自动获取当日所有股票数据

    开年以来,大盘直接从2400站上了3200,为了后续进一步分析股票数据,我想把每只股票每天的数据保存下来. import pandas as pd import tushare as ts impor ...

  9. 风火编程--python获取单只股票实时数据和历史数据

    获取股票数据 这本来是专门为我的一个单一选股模型提供数据的类, 因此封装的只是模型中需要的数据. 如有其它需求可以自己扩展. 积分多的可以下载文件, 没积分的直接复制下面的代码是一样的. 代码不复杂, ...

最新文章

  1. java newline_Java BufferedWriter.newLine()方法示例
  2. ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)
  3. 37 SD配置-销售凭证设置-分配项目类别
  4. 给fiddle 解密_fiddler学习笔记2 字段说明;移动设备、解密证书
  5. c++ primer课后题答案 第9章 : 顺序容器
  6. LOCK TABLES
  7. Java中文件路径的写法
  8. 探索软件设计模式(二)
  9. python3 自定义排序_Python3中的自定义排序
  10. python写脚本的优势_python写脚本的优势玩被叫
  11. oracle clob 导出csv,在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法...
  12. Windows 8实用窍门系列:11.Windows 8 中的Toast Tile Badge通知
  13. 操作系统实验及代码(全)
  14. 运筹学 知识点总结 (十一)
  15. 数据分析之参数检验与非参数检验
  16. JAVA8安装与配置
  17. usb驱动开发21——驱动生命线
  18. sketch和zeplin
  19. html中qq号码怎么写,根据QQ头像hash分析QQ号(html版)
  20. 【JZOJ100209】【20190705】狂妄之人

热门文章

  1. GDB常用调试命令以及多进程多线程调试
  2. Java实习生第一天及未来规划
  3. Word文件的限制编辑如何停止保护
  4. 官方文档链接(Core Graphics、View Controller、UICollectionView、UITableView、第三方库)
  5. 物体方位判断以及上坡/下坡道路坡度计算
  6. 携手沙溢背后,土巴兔正引领家装走向数智化
  7. 计算机中软盘硬盘都有吗,软盘、硬盘、磁盘和内存的区别与联系
  8. java validate_java 常用验证,手机号、固话、邮箱、工具类 ValidateUtil
  9. 共建手机页游生态圈 腾讯助力Cocos秋季峰会
  10. MySQL笔记8--有关查询(9简略)