Java提取网站后台数据进行处理并排名

Java提取网站后台数据进行处理并排名

一、网页分析

截取的网站链接为:https://www.tiobe.com/tiobe-index/

打开网站后,可以看到这个网站的编程语言排名情况。我们选择下图中的图表,这个图表中有2001-2019年的编程语言每个月的使用率,我需要它的数据。

二、数据提取

在网页点右键,点击查看源码:首先我们要编程把源码下载到记事本里,看一下核心代码

 1 URL url = new URL(website);
 2 // 根据链接(字符串格式),生成一个URL对象
 3 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
 4 // 打开URL
 5 BufferedReader reader =new
 6 BufferedReader(new InputStreamReader(urlConnection.getInputStream(), encoding));
 7 // 得到输入流
 8 Save.saveStr("",file,false);
 9 //清空记事本文件的内容
10 while ((str = reader.readLine())!= null) {
11     //每次读取一行,放入记事本中
12    Save.saveStr(str,file,true);
13     Save.saveStr("\r\n",file,true);
14 }

下载完成后,我们打开这个文件,看一看这个文件里的内容,只截取一部分

三、数据处理

首先找到我们需要的数据(对应上图的排名的数据),利用正则表达式将数据提取出来。

上图是对应的数据,现在利用正则表达式来提取核心代码如下:

 1 //正则表达式要匹配的数据
 2 Pattern dataCompile = Pattern.compile("Date.UTC[(]\\d{4}, \\d{1,2}, \\d{1,2}[)],\\d{1,2}.\\d{3}|name : ‘\\w++(\\W{0,2})? ( \\w++)(\\w++)?‘,data");
 3 String s;
 4 try {
 5     //读入后放入记事本文档中
 6     System.out.println("处理数据中......");
 7     Save.saveStr("",file,false);
 8     while ((s = in.readLine())!=null){
 9     Matcher dataNeed = dataCompile.matcher(s);
10     while (dataNeed.find()){
11     Save.saveStr(dataNeed.group(),file,true);
12     Save.saveStr("\r\n",file,true);
13 }catch (Exception e){
14     e.printStackTrace();
15 }

处理完成后,打开保存的文件,可以看到一下结果,这里仍然只截取一小部分。

这个数据中有时间和使用率,这些是我绘图所需要的,这里依然使用正则表达式将他们全部读取出来放入一个类中。

看一下这个类的核心代码

 1 public class Data{
 2
 3     private String language;          //存放语言名称
 4
 5     private double data;              //存放使用率
 6
 7     private String month;             //存放月
 8
 9     //省略字段的属性
10 } 

用这个类来存放数据,用着则表达式来提取文本中的数据,将数据放在这个类实例化的对象中。分别存放这个语言的名字和某一个时间的排名,每一个对象存放一个数据,提取后把这些对象放进10行12列的数组中。然后根据数据的大小进行排序,比如我绘制2002年的数据,排好序了之后的情况如图

这是对应的使用率

0代表这个时间的数据缺失,由于网站数据的问题,会缺少某一时间的数据,这里设置了一个循环标记,用标记来匹配正则表达式匹配到的月份,如果两个结果不相等则代表这个月数据缺失,当发现数据缺失的时候,会自动为这个月的使用率补0。

另外有看到有两个jav,其实下面的jav是JavaScript语言,我只截取了名字的三个长度,方便清楚的看到排名情况。这里简单的解释一下。

主窗口的设计省略,在选择不同的信息时会出现不同控件。

下面说绘图,绘图在Java的JPanel中绘图。我们要想自由绘图,就需要重写JPanel类中的public void paintComponent(Graphics g)方法然后调用g.drawLine()函数,对排好序的数据进行绘制。图形是根据他们在某一时间固定的排名进行绘制的。

四、程序运行结果

算法实现后首先来看一下运行结果,我还是绘制2002年的排名结果,以便更好对应上图中的排名情况。横轴是月份,竖轴是排名,看效果。

x轴以月为单位时,可以绘制2001 – 2019 年的数据,某一时刻缺少数据时,可以自动跳过。

x轴以年为单位时,可以绘制2001 – 2019 年每一年年平均使用率排名或者每一年每一个月的排名情况。

首先来看2001-2019年年平均使用率情况

这个是数组里的使用率数据。

看一下具体某个月份的排名情况

有一些数据空缺是因为某一年的3月份没有数据,我们把排名情况的数据截图下来,可以看到,2001、2008年这两年3月的数据都是0,上文已经说过,0代表数据缺少。

可以看到,上图中没有绘制数据的的时间的使用率均为0。

五、实现保存功能

当点击保存按钮时可以把自己绘制的图形保存至计算机中,首先来看核心代码:

 1 //文件选择框,点击确定时,返回选择文件的路径。
 2 public static String fileSave(Component parent,String name) {
 3     JFileChooser fileChooser = new JFileChooser();
 4     fileChooser.setSelectedFile(new File(name));
 5     int result = fileChooser.showSaveDialog(parent);
 6     if (result == JFileChooser.APPROVE_OPTION) {
 7         File file = fileChooser.getSelectedFile();
 8         return file.getAbsolutePath();
 9     }
10     else
11         return null;
12 }

这部分的是实现文件保存,但是我们需要路径,所以用JfileChooser类来选择路径,选择好路径并且完成命名后返回路径的字符串给上部分代码中的file,考虑到重名问题,做了一些处理,比如我要保存名字为"hello.jpg"的文件,当文件存在时,会自动保存为"hello1.jpg"。

来看一下保存的结果。

打开它

完成。

源代码连接为:https://github.com/LiangMengnan/Data-statistics

原文地址:https://www.cnblogs.com/Nanner/p/10880720.html

时间: 2024-10-16 15:43:41

Java提取网站后台数据进行处理并排名的相关文章

java 企业网站源码 后台 springmvc SSM 前台 静态化 代码生成器

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 点击:获取地址 QQ 313596790 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的相应式布局,支持PC.平板.手机浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java web(非maven) 

java企业网站源码 后台springmvc SSM 前台静态引擎 代码生成器

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 前台: 支持两套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java we

java 企业 网站源码 后台 springmvc SSM 前台 静态化 代码生成器

前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +spring4.3.7+ mybaits3.3  SSM 普通java web(非maven, 赠送pom.xml)  数据库:mysql --------

Java语言实现通过Ajax抓取后台数据及图片

1.Java语言实现通过Ajax抓取后台数据及图片信息 1.1数据库设计 create table picture( pic_id number not null, pic_name varchar(200)not null, pic_url varchar2(200) not null, pic_descp varchar2(200) not null, pic_price varchar2(200) not null ) insert into picture values(1 ,'小米5s

开源 免费 java CMS - FreeCMS1.9 移动APP生成网站列表数据

项目地址:http://www.freeteam.cn/ 生成网站列表数据 提取同意移动APP訪问的网站列表,生成json数据到/mobile/index.html页面. 从左側管理菜单点击生成网站列表数据进入. 点击确定就可以.

java扒取天气网站的数据

1:由于天气apk接口不稳定所以经常获取不到信息.于是就动手写一个扒取天气网站上的数据然后做成json,apk直接调用服务器上扒取的数据增加稳定性. 2:项目主要是用servlet然后正则表达式来提取网站信息. 3:我觉得比较难得地方就是如何写正确的正则来提取出需要的信息,以下记录每个接口中需要的正则 3.1 获取页面省份的编号 //page为需要提取信息的源信息 public static Hashtable<String, String>parseProvincePage(String p

基于SSM框架下的JAVA网站后台管理平台

今天将为大家分析一个网站后台管理平台(介绍了使用网站后台管理系统来设计和开发信息网络平台的解决方案,包括系统开发平台.结构模块.技术特点及其应用分析,从而实现智能化的分布式信息制作.发布.维护和管理.网站后台管理系统主要是用于对网站前台的信息管理,如文字.图片.影音.和其他日常使用文件的发布.更新.删除等操作,同时也包括会员信息.订单信息.访客信息的统计和管理.简单来说就是对网站数据库和文件的快速操作和管理系统,以使得前台内容能够得到及时更新和调整.),该项目使用框架为SSM(MYECLIPSE

获取笑话集网站笑话数据的后台代码

最近做了一个app用于获取笑话集网站的数据,为了方便开发.我先用PHP对数据进行了预处理 代码如下   <?php include_once("writeLog.php"); class Joke { var $jokeText = ""; var $urlNext = ""; var $urlPrv = ""; var $urlBase = "http://wap.jokeji.cn/"; func

毕业将至,同学们该如何找到更好的java网站后台设计程序

一,关于我们我们是专业从事于定做计算机相关毕业设计,拥有专业的写手团队和严格的保密制度.我们的工程师们在软件工程开发与设计的各个领域积累了丰富的经验,保证服务水平.我们致力于为客户提供各专业高质量的毕业设计定做服务,为即将毕业的同学提供毕业设计指导.毕设代做.毕设定制等一站式服务.强大的专业能力,高效的服务水平,多年以来一直深得客户好评,毕业只有一次,我们将尽心尽力为你完成毕设. 联系我们:.扣.扣.号(幺零三贰三七幺贰幺) 与我们取得联系,向我们提出您的写作要求:我们咨询师会根据您的服务需求和