最初诞生VBA网抓的想法,还是因为自己炒股想要更快速获取信息,又不想买费用高昂的券商软件。后来调查发现,其实Python才是最出名的爬虫制作工具,但是要安装环境,最后做出来又只能在自己电脑上用,通用性不太强,所以就把目光对准了使用Excel或者VBA网抓。
(一)使用Excel自带的Power Query获取网页表格
如果一个方法能解决现有需求,说实话,我是没有动力去找第二个方法的。在使用VBA网抓之前,我就已经开始使用Excel的Poewr Query在做股票信息分析,最开始用的Power Query的“新建查询”功能,从网页获取表格数据(具体方法可以参考:/tech/2021-05-06/doc-ikmyaawc3588981.shtml),可以直接更新到Excel表格中。数据源当时选取的是中财网数据引擎(/cfidata.aspx),不得不说这个网站真的对使用Excel自动网页数据源获取真的非常友好,因为都是可以识别的表格形式数据。更新Excel后是这个样子。之后利用简单学习的Power Query操作就可以快速清洗并分析处理大量数据。
然而,后来其实发现了这个方法的局限性,就是对数据源要求太高了,很多网站的表格数据,用Excel导入网站数据源的形式识别不了,而且我想要的股票或者期货历史数据,也不在这个网站中。并且Power Query这个方法爬虫数据分析,WPS是不支持的。这样无奈最后放弃了这个思路,开始探索真正的VBA网抓实现方法。
(二)Excel VBA 实现期货行情获取及历史数据下载
第一步,选择数据源。如果是用Python网抓,其实数据源是非常好找的,网上很多都是为Python开放的接口,开发者甚至都不需要找源网页,直接用各种接口提供的现成的结构化数据就可以,连数据处理的步骤都省略了。然而,毕竟还有很多人像我一样,电脑上没有Python,电脑上更不会去安装Python库(这些现成的接口都需要在电脑上安装Python库),或者说不希望看到换了电脑软件就用不了的情况,所以数据源还是选择通用一点的。经过调研中国的期货市场情况后,发现其实获取数据只要从四大交易所(郑州、大连、上海、中国金融期货交易所)官网获取就可以了,这些网站都提供有下载链接和一键下载的功能。然而,在后续分析html请求和响应的时候,最让我这个强迫症患者接受不了的情况发生了,四个交易所里面,三个可以抓,一个有反爬虫抓不了。。。这样还得再找其余的接口,不行,接受不了!后来发现,新浪接口真是个宝贝,四个交易所都包括了,好的就决定分析这个网页,然后抓取,成功!附新浪接口链接(需要自行分析这个网页,找到适用的名称规则并简化):
实时行情:.cn/quotes_service/view/qihuohangqing.html#titlePos_1
历史数据:.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主发布的免费教程(链接/video/BV1uJ411t7hY/)在这次抓取期货时,先分析的新浪财经的网页,发现这个接口并不复杂,可以直接用Winhttp请求,然后用正则表达式处理返回数据即可。核心代码如下:
发送请求部分
正则表达式匹配及写入数组部分
需要注意的是,在更新产品行情时,产品的名称网抓返回的是unicode码,所以还需要额外将其转为汉字,这部分编写了一个自定义函数,代码如下:
网抓的部分还有一个需要注意的就是对返回json格式数据的处理。其实VBA可以引用script组件,实现对json数据的快捷方便的解析,而且引用此类组件解析json,自动会实现unicode转汉字。但是此类方法测试中wps运行正常,但是有的excel会报错,说是缺少ActiveX控件的429错误爬虫数据分析,这个就不好解决了。一般这类错误不是excel版本导致的,大概率是没有完整安装,或者同时安装wps及office导致某些系统组件注册失败。这种错误通过修改代码解决不了(除非更改代码逻辑,不调用其余组件),是系统的问题,例如注册表项受损、操作系统的文件被删除、安装了不完整的excel、系统文件受损等。所以最后为了增加兼容性,避免此类错误,又重
来源【首席数据官】,更多内容/合作请关注「辉声辉语」公众号,送10G营销资料!
版权声明:本文内容来源互联网整理,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jkhui22@126.com举报,一经查实,本站将立刻删除。