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

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

先看结果,这个是做好的演示视频和样本数据:

基金样本数据链接:https://pan.baidu.com/s/1T0I524wQ3TsnJVZoHm42EQ

提取码:1234

基金数据下载器演示视频:https://www.bilibili.com/video/BV1Wq4y1876P/

第一步,选择数据源。基金方面,经过前期收集资料,发现“天天基金”网数据比较全(可以获得实时行情和历史数据),能满足基本需求,而且网上其余的抓取好像都是在用天天基金的数据源,所以也打算使用天天基金作为抓取数据源。

经初步浏览天天基金的网站,发现大概可以值得抓取的有这么几项,分别附上接口(以代码000001基金为例):

实时行情:http://fund.eastmoney.com/000001.html

历史数据:https://fundf10.eastmoney.com/F10DataApi.aspx?type=lsjz&code=000001&page=1&sdate=20201201&edate=20211201&per=45

新成立基金:https://fund.eastmoney.com/data/FundNewIssue.aspx?t=xcln&sort=jzrgq,desc&y=&page=1,20000

所有股票清单:https://fund.eastmoney.com/js/fundcode_search.js

其中,后三者的接口是通过都是分析请求得来的,返回的都是纯文本html数据,只有第一个实时行情是正常的网页,采用的方法是返回网页源代码然后用正则表达式匹配。

第二步,代码实现。因为抓取的数据源只有一个(天天基金网),而且返回的也是比较干净的数据,因此网抓部分的代码实现并不复杂。但是在抓取的时候,发现天天基金网的内部使用的应该是UTF-8编码,一开始使用更新的Winhttp对象抓取时,发现所有中文汉字字符抓取后返回的数据都变为了???(乱码),之后搜索各种解码方案,无效。最后无意间发现使用较老的xmlhttp对象发送请求,可以返回正常的中文,这个是没想到的。可能winhttp对象在使用时还会有一些转码的问题吧。

核心部分代码(网抓+正则表达式)如下:

此外,与之前的网抓不同的是,基金的网抓中涉及到翻页获取数据的情况(如下图)。目前采用的方案就是通过for循环的嵌套实现,在外层for循环中首先使用一次请求及正则表达式匹配,获取每类基金数据的总页数。之后内层循环再从不同页之间循环访问。

第三步,数据处理及交互界面。交互界面的设计相对简单,沿用了之前的方案,这里不细说。但是基金这部分的数据处理确实值得讲一下。一是在抓取阶段的判断,使用If语句判断基金类型,因为货币型基金是比较特殊的,没有净值的概念,取而代之的是每万份收益。因此抓取时所用的正则表达式也是不一样的。二是获取到了数据后,由于数据源对于货币型基金并没有“日增长率”的数据,因此需要将相关部分写为“无”。三是为数据设计了两种存储方式(在当前工作簿以及新建工作簿)。因为条件和循环比较多,所以涉及到大量的for以及if嵌套,建议一定要写好注释,并做好代码的缩进,不然看起来会非常困难。

软件地址:https://item.taobao.com/item.htm?ft=t&id=666428898403

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值