从前,我的人生只有叙事。你出现后,我的世界有了诗。
1 前言
上篇文章中已经介绍了场内 ETF
基金的爬虫和分析,在本文中将介绍另外一种基金-场外基金爬虫。场外基金是一种对小白来说是一种很重要的理财手段,曾经无脑买入了一些基金,但是表现都不好。在本文中将介绍如何利用 java
爬虫获取场外基金的基本信息、买卖费率和收益表现。最终会将爬虫的信息存入到数据库中用于查询和数据分析。
2 前期准备
首先我们需要从天天基金网上获取场外基金的信息列表,当点击分页时通过浏览器控制台可以看到列表信息的返回,这就是需要解析的数据来源。但是场外基金和场内基金不同,其接口列表和数组位置信息含义不同,这里需要按照基金信息页面的数值进行逐个比对,找到每个下标对应的含义。
bash
# 场外基金列表地址
http://fund.eastmoney.com/data/fundranking.html
和场内基金相同,场外基金也需要使用 Java
进行爬虫,主要是使用 hutool
工具类 和 jsoup
抓取页面进行页面元素处理。 根据所需要的数据信息,构建的场外基金数据库表的结构如下所示:
3 数据抓取
通过浏览器控制台可以发现场外基金的访问列表,返回的内容和场内基金结果是相似的,对比基金详情页面和列表返回的内容,可以定位分析数组中每个元素对应值的含义。
bash
# 基金列表接口
http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=all&rs=&gs=0&sc=1nzf&st=desc&sd=2022-08-26&ed=2023-08-26&qdii=&tabSubtype=,,,,,&pi=1&pn=50&dx=1
# 场内基金详情页面
http://fund.eastmoney.com/006479.html
# 基金基本信息页面
http://fundf10.eastmoney.com/jbgk_006479.html
# 基金费率信息
http://fundf10.eastmoney.com/jjfl_002147.html
# 返回内容的分析
0 006479, 基金代码
1 广发纳斯达克100ETF联接人民币(QDII)C, 基金名称
2 GFNSDK100ETFLJRMBQDIIC,
3 2023-08-24, 更新日期
4 4.5258, 单位净值
5 4.5258, 累计净值
6 -2.27, 日增长率
7 0.54, 近一周
8 -3.32, 近一月
9 10.82, 近三月
10 28.19, 近六月
11 18.97, 近一年
12 3.75, 近两年
13 28.10, 近三年
14 38.54, 今年来
15 105.56, 成立以来
16 2018-10-25 成立日期
,1,,,0.00%,,,,
分析场外基金的逻辑和场内基金是类似的,可以参考 java 场内基金爬虫与存储实战 中的分析逻辑和方法,下图是基金详情页面的展示。
在获取场外基金列表信息时,同样需要在请求头中添加 Referer
信息,同样使用 hutool
的 http
请求工具类获取接口的返回内容。
和场内基金不同的是,场外基金不仅数量多,种类也多,目前市场上的股票数量是 5000+
,但是基金的规模已经是 1.3w+
, 其选择的难度加大。由于每个种类的数量也多,这里还需要用到分页去获取每页的基金数据,场外基金的接口响应比场内基金慢的多。通过对比各种类型基金的请求参数,发现其参数 ft
传输不同的值,即可获取不同种类的基金。 具体如下所示:
gp-股票型
hh-混合型
zq-债券型
zs-指数型
qdii-qdii
lof-lof
fof-fof
场外基金的信息主要分为三个部分,列表展示的涨跌表现、基金的基本信息、买卖手续费信息。其中第一个需要每天都需要更新,第二个只需要在季报时更新即可,第三个一般基金成立后就不会修改,所以对于这三者的更新频率是不同的。
这里的基本信息和场内基金类似,就不展开讲述,这里讲述一下手续费的信息获取方式。打开基金费率信息页面,我们需要解析申购费率和赎回费率表格中的内容。
如下图所示,主要是通过 jsoup
来解析 html
页面来获取赎回费率和申购费率。
4 数据存储
通过对场外基金的分析和抓取,已经获取到了场外基金的主要信息,并使用对象进行存储,这里需要循环所有基金的类型,获取一批基金数据,然后进行存储。还是通过 mybaits-plus
存储,使用的存储数据库是阿里云 oceanbase
。
这里使用的是定时任务的方式去获取数据,由于场外基金的数据量太多,跑完整个流程需要 1h
左右。
通过数据的获取,可以通过对比涨跌幅,持有期限和基金的规模,选到自己心仪的基金。场外基金列表已经全部获取到了,在市场上好的时候,可以买入权益类资产,股票基金或者指数基金或者主题基金,在市场不好的时候,买入稳健的债券基金,通过该列表可以进行全量分析和筛选,需要综合考虑自己的选择标的,其中基金的规模不能太低,池子太小不好操作,规模太大也不好,最好是 5-50
亿元之间的规模。
5 总结
在本文中,通过爬虫的方式获取场外基金的信息(包括涨跌幅,基本信息、买卖费率),并存入到数据库中方便分析和研究,至此已经完成了场外和场内基金的抓取和存储,对基金投资感兴趣的掘友可以依据此进行研究和选择。项目涉及的代码已经上传,项目 github
地址 springboot-auth。