java 场内基金爬虫与存储实战

1 前言

相信看到这篇文章的你也许买过场外基金,ETF 是一种场内基金,只有开通特定的账户才能交易。作者在之前的文章中已经介绍了 python爬虫-场内基金获取 ,在本文中将介绍如何使用 java 进行爬虫,并将爬虫数据存入数据库中。

2 环境准备

首先我们需要确认 ETF 基金的数据来源,如下图所示即我们需要抓取的数据,列表中的所有信息都会存入到数据库中,用于分析和查询ETF信息。

bash 复制代码
# 场内基金列表访问地址
http://fund.eastmoney.com/data/fbsfundranking.html

使用 Java 进行爬虫,主要是使用 http 请求(使用hutool工具类)和 jsoup 抓取页面进行页面元素处理。 根据所需要的数据信息,构建的数据库表的结构如下所示:

3 数据抓取

ETF 信息页面,通过浏览器控制台我们可以发现场内信息列表是通过接口来返回的,如下所示:

bash 复制代码
# 基金列表接口
http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=fb&ft=ct&rs=&gs=0&sc=clrq&st=desc&pi=1&pn=5000
# 场内基金详情页面
http://fund.eastmoney.com/513360.html
# 基金基本信息页面
http://fundf10.eastmoney.com/jbgk_002147.html
# 返回内容的分析
0 513100, 基金代码
1 国泰纳斯达克100ETF, 基金名称
2 GTNSDK100ETF,
3 2023-08-24,
4 1.0780, 单位净值
5 5.39,  累计净值
6 0.37,  近一周
7 -3.58, 近一月
8 10.68, 近3月
9 28.18, 近6月
10 19.91, 近一年
11 5.54, 近两年
12 30, 近三年
13 38.56, 今年来
14 439, 成立依赖
15 2013-04-25 成立日期

通过对列表接口返回内容的分析,对比基金的详情页面,可以得到在 分析下图的接口列表,发现其返回的不是一个 json 格式的数据,接口的访问是一个 jsoup 的回调方式 ,但是去掉 var rankData =后,会发现其是一个标准的 json 格式,需要获取的数据在 datas 节点里面,每一个数据是一个 数组的方式,数组内的每一个数据都有其独特的含义,通过对比基金详情页面的内容,可以获取到数组内每个下标的数据含义,如上所示。

如下所示,即编写的爬虫代码,由于网站设置了防盗链,所以需要添加 Referer ,否则获取不到列表数据。还是使用 hutool 的 http请求工具类获取接口的返回内容。 在以上代码中,获取基金基本信息时采用 jsoup 的方式获取网页元素进行编码。在获取基金基本信息时,用到了一个 java 的知识点,如何使两个 list 按照顺序合并成一个 map。在获取基金基本信息时,通过分析可以知道其数据结构是一个 table , 但是每个基金的信息可能不全是这样的结构,所以通过位置元素的方式来获取内容容易出错。仔细观察基金名称和基金名称内容,可以知道其是不同的标签,一个是 th 一个是 td ,其顺序都是交替出现的,通过 jsoup 获取到整个 table ,然后分次获取 thtd 的内容,即可取到对应的值,将两个 list 合并成 map , 通过 getDefault 的方式来获取数据,既方便也可以避免空指针的问题,一举两得。

如下图所示,即是通过网页元素抓取基金基本信息的代码:

4 数据存储

通过数据的分析和抓取,已经获取到了 ETF 的基本数据,通过 mybaits-plus 进行数据的存储,使用的存储是阿里云 oceanbase 数据库。

ini 复制代码
# 抓取etf 信息列表,存储数据库
List<EtfInfo> etfInfos = TianFundUtils.etfInfoList();
stockService.saveEtfInfoList(etfInfos);

通过对今年的表现的排序,按照表现倒序排列,就可以找到表现比较好的投资标的。

场内基金的基本信息已经抓取到了,可以通过基金规模,标的去跟踪选择需要投资的品种,在爬虫之余还可以收集到一些信息,何乐而不为呢,感兴趣的朋友可以深入研究一下。

5 总结

在本文中,通过爬虫的方式获取场内基金的列表信息和基金基本信息,存入到数据库中方便分析和研究,在整个过程中还学习到了一个技术点,对投资感兴趣的朋友可以依据此进行研究和选择。项目 github 地址 springboot-auth

相关推荐
2401_854391082 分钟前
Spring Boot OA:企业数字化转型的利器
java·spring boot·后端
山山而川粤9 分钟前
废品买卖回收管理系统|Java|SSM|Vue| 前后端分离
java·开发语言·后端·学习·mysql
好看资源平台10 分钟前
网络爬虫——常见问题与调试技巧
爬虫·python
武昌库里写JAVA11 分钟前
Vue3与Vue2 对比
spring boot·spring·毕业设计·layui·课程设计
2301_8112743111 分钟前
基于Spring Boot的同城宠物照看系统的设计与实现
spring boot·后端·宠物
2301_811274311 小时前
springboot嗨玩旅游网站
spring boot·后端·旅游
CoderJia程序员甲2 小时前
重学SpringBoot3-Spring Retry实践
java·spring boot·spring·retry·重试机制
mit6.8242 小时前
[Redis#4] string | 常用命令 | + mysql use:cache | session
数据库·redis·后端·缓存
疯狂学习GIS2 小时前
创建第一个IDEA的Java项目的方法
java·后端·intellij idea
《源码好优多》2 小时前
基于Java Springboot未央商城管理系统
java·开发语言·spring boot