利用Java爬取基金网站的基金数据,快速筛选优质热门基金
爬取数据源为天天基金网的页面基金数据
利用java爬取基金数据并简单筛选后的效果图
创建java maven项目,推荐用spring boot
maven需要引入的jar包依赖
<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--阿里巴巴fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency><!-- hutool工具类--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.6</version></dependency>
单类代码实现,copy代码在idea编辑器里主类启动
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;import java.util.List;
import java.util.stream.Collectors;public class FundSearch {static String api = "https://fundapi.eastmoney.com/fundtradenew.aspx?sc=1n&st=desc&cp=&ct=&cd=&ms=&fr=&plevel=&fst=&ftype=&fr1=&fl=0&isab=1";private static final List<String> typeList = Lists.newArrayList();static {typeList.add("&ft=gp"); //股票型typeList.add("&ft=hh");//混合型typeList.add("&ft=zq"); //债券型typeList.add("&ft=zs"); //指数型typeList.add("&ft=qdii"); //QDIItypeList.add("&ft=fof"); //FOF}public static void main(String[] args) {List<Fund> funds = getAllFunds();System.out.println("共扫描基金" + funds.size() + "只");System.out.println("搜索近1周涨幅大于1%,近1月涨幅大于4%,近3月涨幅大于12%,近6月涨幅大于24%的基金,近1年涨大于48%的基金");funds = funds.stream().filter(e -> e.getDealStatus() == 1 && e.getWeekRise() > 1 && e.getMonthRise() > 4 && e.getThreeMonthsRise() > 12 && e.getSixMonthsRise() > 24 && e.getOneYearRise() > 48).collect(Collectors.toList());System.out.println("符合条件的基金共" + funds.size() + "只");funds.forEach(e -> System.out.println(e.getRowData()));}public static List<Fund> getAllFunds() {List<Fund> dataList = Lists.newArrayList();typeList.forEach(type -> {dataList.addAll(getTypeFunds(api, type));});return dataList;}public static List<Fund> getTypeFunds(String API, String type) {List<Fund> dataList = Lists.newArrayList();String body = HttpUtil.get(API + type + "&pi=1&pn=1000");Integer pages = getPages(body);dataList.addAll(parseFundData(body));for (int i = 0; i < pages; i++) {body = HttpUtil.get(API + type + "&pi=" + (i + 2) + "&pn=1000");dataList.addAll(parseFundData(body));}return dataList;}public static List<Fund> parseFundData(String text) {List<Fund> funds = Lists.newArrayList();text = text.replace("var rankData = ", "");text = text.replace(";", "");JSONObject json = JSONObject.parseObject(text);JSONArray array = json.getJSONArray("datas");for (int i = 0; i < array.size(); i++) {Fund fund = conversion(array.getString(i));funds.add(fund);}return funds;}public static Integer getPages(String text) {text = text.replace("var rankData = ", "");text = text.replace(";", "");JSONObject json = JSONObject.parseObject(text);Integer pages = json.getInteger("allPages");return pages;}public static Fund conversion(String text) {String[] args = text.split("\\|");Fund fund = new Fund();fund.setRowData(text);fund.setCode(args[0]);fund.setName(args[1]);fund.setType(args[2]);fund.setDate(args[3]);fund.setNetValue(StrToDouble(args[4]));fund.setDayRise(StrToDouble(args[5]));fund.setWeekRise(StrToDouble(args[6]));fund.setMonthRise(StrToDouble(args[7]));fund.setThreeMonthsRise(StrToDouble(args[8]));fund.setSixMonthsRise(StrToDouble(args[9]));fund.setOneYearRise(StrToDouble(args[10]));fund.setTwoYearsRise(StrToDouble(args[11]));fund.setThreeYearsRise(StrToDouble(args[12]));fund.setCurYearRise(StrToDouble(args[13]));fund.setHistoryRise(StrToDouble(args[14]));fund.setPoundage(StrToDouble(args[18]));fund.setDtStatus(Integer.valueOf(args[22]));fund.setDealStatus(Integer.valueOf(args[23]));return fund;}public static Double StrToDouble(String str) {str = str.replace(",", "");return StringUtils.isEmpty(str) ? 0 : Double.valueOf(str);}@Datastaticclass Fund {/*** 基金代码**/private String code;/*** 基金名称**/private String name;/*** 基金类型**/private String type;/*** 净值时间**/private String date;/*** 基金净值**/private Double netValue;/*** 日增长率**/private Double dayRise;/*** 近1周**/private Double weekRise;/*** 近1个月**/private Double monthRise;/*** 近3个月**/private Double threeMonthsRise;/*** 近6个月**/private Double sixMonthsRise;/*** 近1年**/private Double oneYearRise;/*** 近2年**/private Double twoYearsRise;/*** 近3年**/private Double threeYearsRise;/*** 近1年**/private Double curYearRise;/*** 成立以来**/private Double historyRise;/*** 手续费**/private Double poundage;/*** 是否可以定投0no1ok**/private Integer dtStatus;/*** 交易状态**/private Integer dealStatus;/*** 行文本数据**/private String rowData;}}
本章完结,后续可以建立数据库,对基金数据,做更深度一点的数据分析。
利用Java爬取基金网站的基金数据,快速筛选优质热门基金相关推荐
- 爬取某网站的潮汐数据
爬取某网站的潮汐数据 import re,os import requests import datetime import random import timeheaders = {'User-Ag ...
- python爬取股票信息_利用Python爬取网易上证所有股票数据(代码
利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...
- 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中
我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...
- 利用Python爬取翻译网站的翻译功能
现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码. 首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/ 咱们用Python中的urllib模块的功能进 ...
- python爬取外文文献翻译_利用Python爬取翻译网站的翻译功能
现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码. 首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/ 咱们用Python中的urllib模块的功能进 ...
- python爬取web漫画网站_[Python爬虫学习]利用selenuim爬取漫画网站
注意事项 版本 Python版本为 Python-3.8.3 系统为 Windows10 浏览器为 Firefox-77.0 前置 \(selenium\) \(BeautifulSoup\) \(r ...
- 利用paddlepaddle爬取丁香园实时统计数据,并生成疫情地图!!
当下,新型冠状病毒感染的肺炎疫情无时无刻不牵动着人们的心.面对来势汹汹的疫情,除了奋战在前线的医护人员以及防疫建设工作者们,小媛们也想尽一份绵薄之力. 这不,今天为大家带来了一份超超超简单的!生成自己 ...
- Python爬取网站用户手机号_利用python爬取慕课网站上面课程
1.抓取网站情况介绍 抓取网站:http://www.imooc.com/course/list 抓取内容:要抓取的内容是全部的课程名称,课程简介,课程URL ,课程图片URL,课程人数(由于动态渲染 ...
- 利用爬虫爬取 zol网站热门手机
使用了20几分钟,爬取了zol相关的热门手机型号.特点.价格.上市时间.屏幕大小相关信息.对最新的热门手机做了一个简单的统计.如果你想知道任何其他的信息,可以给我留言.我已经把我的相关代码传导了git ...
最新文章
- 三个线程按循序一个打印A一个打印B一个打印C 循环打印?
- PTA 基础编程题目集 7-11 分段计算居民水费 C语言
- hbase redis mongoddb neo4j 非关系型数据库简介
- (收藏)[Unix] vi基本操作方法
- 前端学习(1363):学生档案信息管理5
- 树莓派开始玩转linux pdf_用树莓派构建 Kubernetes 集群 | Linux 中国
- USACO-Section2.3 Longest Prefix
- Oracle小复习(1)
- rabbitmq中的消息有id吗_RabbitMQ 如何实现对同一个应用的多个节点进行广播
- 直播系统源码,直播平台系统源码
- J1939入门(一)
- 新旧身份证合法性验证及相互转换算法(一):关于中国居民身份证的常识
- 没有光驱照样安装Win7!U盘装系统教程
- 根据身份证号 计算具体年龄
- 微信小程序学习笔记③——wxml+wxss+js基础入门[样例+解析]
- 计算机英语200心得体会,学英语的心得体会作文200字作文:学习英语的感受的英语作文(100~120词)...
- c++构造函数的定义
- 《计算机工程》投稿经验
- python中flush什么意思_python flush()定义及作用详解(实例分析)
- DGUT新学期,新FLAG