基金变动信息获取之 Java 爬虫

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

股市有风险,投资需谨慎。
复制代码

1. 前言

通过前面两篇文章,可以获取基金列表以及基金的概况信息,接下来我们继续通过 Java 爬虫获取基金的变动信息。

有的童鞋就会问,直接访问基金网站的地址不是也能获取吗。确实是可以获取,,但是如果你想要对比多支基金时,就需要注册账号,收藏多支基金,不能形成一个对比形式方便自己观阅。难道手动每天记录每支基金的变化情况以及计算对比数据信息吗。

2. 获取基金变化曲线

访问基金详情地址,可以在页面上看到当前基金的净值估算、单位净值、累计净值及时间段净值变化等相关信息。

 http://fund.eastmoney.com/009265.html
复制代码

image-20211120225654527

这些数据信息从哪里来呢,通过 页面解析,发现两个有意思的 js文件,大致的分析如下:

 http://fund.eastmoney.com/pingzhongdata/009265.js?v=20211120224036
 # 
 # http://fundgz.1234567.com.cn/js/009265.js?rt=1637419962027  返回数据如下:
         dwjz: "1.2283"
         fundcode: "009265"
         gsz: "1.2309"
         gszzl: "0.21"
         gztime: "2021-11-19 15:00"
         jzrq: "2021-11-18"
         name: "易方达消费精选股票"
   # 简单的分析下, dwjz:单位净值     fundcode: 基金代码    gsz:估算值   gszzl: 估值增长率  
                 gztime:估值时间   jzrq:净值日期   
   # 看到这里是不是感觉,这些人很可爱呢 ~.~
复制代码

如何获取界面的相关信息呢,本文提供两个方法供读者参考

一 、通过访问上面的 url 获取返回值的信息

 // 指定对应基金的变动 url
 String fundUrldetl = "http://fundgz.1234567.com.cn/js/009265.js?rt=1637419962017";
 //  发送一个 Http 请求,并获取返回信息
 HttpResponse httpResponse =  HttpRequest.get(fundUrldetl).timeout(300 * 1000)
                 .setConnectionTimeout(200 * 1000).execute();
 String body = httpResponse.body();
 // 获取内容如下,可以对当前的字符串进行相应解析,获取对应的值
 jsonpgz({"fundcode":"009265","name":"易方达消费精选股票",
          "jzrq":"2021-11-18","dwjz":"1.2283","gsz":"1.2309","gszzl":"0.21","gztime":"2021-11-19 15:00"});
复制代码

二、通过 Java 的 Jsoup 进行爬虫解析

 Connection connection = Jsoup.connect("http://fund.eastmoney.com/009265.html");
 Document doc = connection.get();
 //  可以选择通过获取Html 标签中id的方式解析当前基金的实时变化情况,下面几个字段的值只金交易时间段产生
 Element gz_gsz = doc.getElementById("gz_gsz");
 Element gz_gszze = doc.getElementById("gz_gszze");
 Element gz_gszzl = doc.getElementById("gz_gszzl");
 // 解析标签中的 class 属性信息
 Elements dataItem01 = doc.getElementsByClass("dataItem01");
       dataItem01.forEach(
               data -> {
                   System.out.println(data.text());
               });
 // 打印结果信息如下:
 // 净值估算(21-11-19 15:00)净值估算每个交易日9:30-15:00盘中实时更新(QDII基金为海外交易时段)。 
 // -- 近1月:-0.37% 近1年:-3.86%
复制代码

3. 基金阶段涨幅

根据基金阶段涨幅变化,可以更好的分析基金的变化情况,至于分析之后能做什么我这个韭菜,就不知道了。

image-20211120235948572

 Connection connection = Jsoup.connect("http://fund.eastmoney.com/009265.html");
 Document doc = connection.get();
 ​
 // 根据Html 界面元素属性获取对应的class标签
 Elements itemLeft02 = doc.getElementsByClass("quotationItem_left quotationItem_left02");
 Elements tr = itemLeft02.select("tr");
 for (int i = 0; i < tr.size(); i++) {
        Element e = tr.get(i);
        // 截断后续Html 标签中的元素
        if (e.text().contains("四分位排名")){
         break;
        }
    
     // 获取时间段信息
    Elements th = e.select("th");
        if (Objects.nonNull(th)){
               System.out.println(th.text());
        }
     // 获取展示行数据信息   
    Elements td = e.select("td");
           td.forEach(
                   t -> {
                       // ownText()  获取当前元素的文本信息
                    System.out.print(t.selectFirst("div").ownText()+  "    ");
                   });
 }
复制代码

Jsoup 中定位元素的方法有很多种,本文可能使用的是相对简单理解的方法,仅供参考使用。

如果想要获取更多关于Jsoup 使用方法的小伙伴欢迎留言,喜欢的小伙伴记得点赞哦。

【参考文章】 juejin.cn/post/703158…

Guess you like

Origin juejin.im/post/7032919066079657991