iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >利用java怎么实现一个网页爬虫功能
  • 826
分享到

利用java怎么实现一个网页爬虫功能

javaava 2023-05-31 07:05:17 826人浏览 独家记忆
摘要

利用java怎么实现一个网页爬虫功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。爬虫实现原理网络爬虫基本技术处理网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数

利用java怎么实现一个网页爬虫功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

爬虫实现原理

网络爬虫基本技术处理

网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般只有以下几种情况:

1) 搜索引

2) 竞品调研

3) 舆情监控

4) 市场分析

网络爬虫的整体执行流程:

1) 确定一个(多个)种子网页

2) 进行数据的内容提取

3) 将网页中的关联网页连接提取出来

4) 将尚未爬取的关联网页内容放到一个队列中

5) 从队列中取出一个待爬取的页面,判断之前是否爬过。

6) 把没有爬过的进行爬取,并进行之前的重复操作。

7) 直到队列中没有新的内容,爬虫执行结束。

这样完成爬虫时,会有一些概念必须知道的:

1) 深度(depth):一般来说,表示从种子页到当前页的打开连接数,一般建议不要超过5层。

2) 广度(宽度)优先和深度优先:表示爬取时的优先级。建议使用广度优先,按深度的层级来顺序爬取。

Ⅰ  在进行网页爬虫前,我们先针对一个飞机事故失事的文档进行数据提取的练习,主要是温习一下上一篇的java知识,也是为了下面爬虫实现作一个热身准备。

 首先分析这个文档,

利用java怎么实现一个网页爬虫功能,关于美国历来每次飞机失事的数据,包含时间地点、驾驶员、死亡人数、总人数、事件描述,一共有12列,第一列是标题,下面一共有5268条数据。

 现在我要对这个文件进行数据提取,并实现一下分析:  

根据飞机事故的数据文档来进行简单数据统计。

1) 哪年出事故次数最多

2) 哪个时间段(上午 8 12,下午 12 18,晚上 18 24,凌晨 0 – 8 )事故出现次数最多。

3) 哪年死亡人数最多

4)哪条数据的幸存率最高。

利用java怎么实现一个网页爬虫功能

利用java怎么实现一个网页爬虫功能

代码实现:(一切知识从源码获取!)

package com.plane;import java.io.*;import java.text.ParseException;import java.text.SimpleDateFORMat;import java.util.*;public class planeaccident {    //数据获取存取链表    private static List<String> alldata=new ArrayList<>();        public static void main(String args[]){            getData("飞行事故数据统计_Since_1908.csv");      alldata.remove(0);      //System.out.println(alldata.size());      //死亡人数最多的年份      MaxDeadYear();      //事故发生次数最多的年份      MaxAccidentsYear();      //事故各个时间段发生的次数      FrequencyPeriod();      //幸村率最高的一条数据       MaximumSurvival();        }            public static void getData(String filepath){      File f=new File(filepath);      //行读取数据      try{        BufferedReader br=new BufferedReader(new FileReader(f));        String line=null;        while((line=(br.readLine()))!=null){          alldata.add(line);        }        br.close();      }catch(Exception e){        e.printStackTrace();      }    }        public static void MaxDeadYear(){      //记录年份对应死亡人数      Map<Integer,Integer> map=new HashMap<>();      //时间用date显示      SimpleDateFormat sdf=new SimpleDateFormat("MM/dd/YYYY");      //循环所有数据      for(String data:alldata){        //用逗号将数据分离,第一个是年份,第11个是死亡人数        String[] strs=data.split(",");        if(strs[0]!=null){          //获取年份          try {            Date date=sdf.parse(strs[0]);            int year=date.getYear();            //判断map中是否记录过这个数据            if(map.containsKey(year)){              //已存在,则记录数+该年死亡人数              map.put(year, map.get(year)+Integer.parseInt(strs[10]));            }else{              map.put(year, Integer.parseInt(strs[10]));            }                      } catch (Exception e) {            // TODO Auto-generated catch block                      }                  }      }      //System.out.println(map);            //记录死亡人数最多的年份      int max_year=-1;      //记录死亡人数      int dead_count=0;      //用set无序获取map中的key值,即年份      Set<Integer> keyset=map.keySet();      //      for(int year:keyset){        //当前年事故死亡最多的年份,记录年和次数        if(map.get(year)>dead_count&&map.get(year)<10000){          max_year=year;          dead_count=map.get(year);        }      }            System.out.println("死亡人数最多的年份:"+(max_year+1901)+"  死亡人数:"+dead_count);    }        public static void MaxAccidentsYear(){      //存放年份,该年的事故次数      Map<Integer,Integer> map=new HashMap<>();      SimpleDateFormat sdf =new SimpleDateFormat("MM/dd/YYYY");      //循环所有数据      for(String data:alldata){        String[] strs=data.split(",");        if(strs[0]!=null){          try {            Date date=sdf.parse(strs[0]);            //获取年份            int year=date.getYear();            //判断是否存在记录            if(map.containsKey(year)){              //已存在记录,+1              map.put(year, map.get(year)+1);            }else{              map.put(year, 1);            }          } catch (Exception e) {            // TODO Auto-generated catch block                      }    }      }      //记录事故次数最多的年份      int max_year=0;      //该年事故发生次数      int acc_count=0;      //循环所有数据,获取事故次数最多的年份      Set<Integer> keyset=map.keySet();      for(int year:keyset){        if(map.get(year)>acc_count){          max_year=year;          acc_count=map.get(year);        }      }      //输出结果      System.out.println("事故次数最多的年份"+(max_year+1901)+" 该年事故发生次数:"+acc_count);    }        public static void FrequencyPeriod(){      //key为时间段,value为发生事故次数      Map<String,Integer> map=new HashMap<>();      //String数组存放时间段      String[] strsTime={"上午(6:00~12:00)","下午(12:00~18:00)","晚上(18:00~24:00)","凌晨(0:00~6:00)"};      //小时:分钟      SimpleDateFormat sdf=new SimpleDateFormat("HH:mm");            for(String data:alldata){        String[] strs=data.split(",");        //判断时间是否记录,未记录则忽略        if(strs[1]!=null){          try {            Date date=sdf.parse(strs[1]);            //取得小时数            int hour=date.getHours();            //判断小时数在哪个范围中            int index=0;            if(hour>=12&&hour<18){              index=1;            }else if(hour>=18){              index=2;            }else if(hour<6){              index=3;            }            //记录到map中            if(map.containsKey(strsTime[index])){              map.put(strsTime[index], map.get(strsTime[index])+1);            }else{              map.put(strsTime[index], 1);            }            } catch (ParseException e) {                      }                }              }            // 记录出事故最多的时间范围      String maxTime = null;      // 记录出事故最多的次数      int maxCount = 0;      Set<String> keySet = map.keySet();      for (String timeScope : keySet) {        if (map.get(timeScope) > maxCount) {          // 当前年就是出事故最多的年份,记录下年和次数          maxTime = timeScope;          maxCount = map.get(timeScope);        }      }      System.out.println("发生事故次数最多的时间段:");      System.out.println(maxTime+" : "+maxCount);                  }        public static void MaximumSurvival(){      //存放事故信息以及该事故的幸村率      Map<String,Float> map=new HashMap<>();      //SimpleDateFormat sdf =new SimpleDateFormat("MM/dd/YYYY");      //事故幸存率=1-死亡率,第十一个是死亡人数,第十个是总人数      float survial=0;          //循环所有数据      for(String data:alldata){        try{        String[] strs=data.split(",");        //计算幸存率        float m=Float.parseFloat(strs[10]);        float n=Float.parseFloat(strs[9]);        survial=1-m/n;        map.put(data, survial);        }catch(Exception e){                  }      }      //记录事故次数最多的年份      float max_survial=0;        //幸存率最高的数据信息      String this_data="null";      //循环所有数据,获取事故次数最多的年份      Set<String> keyset=map.keySet();      for(String data:keyset){        if(map.get(data)>max_survial){          this_data=data;          max_survial=map.get(data);        }      }      System.out.println("幸存率最高的事故是:"+this_data);      System.out.println("幸存率为:"+survial);    }  }

--结束END--

本文标题: 利用java怎么实现一个网页爬虫功能

本文链接: https://www.lsjlt.com/news/224229.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用java怎么实现一个网页爬虫功能
    利用java怎么实现一个网页爬虫功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。爬虫实现原理网络爬虫基本技术处理网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数...
    99+
    2023-05-31
    java ava
  • 怎么使用nodejs实现一个简单的网页爬虫功能
    这篇文章主要介绍了怎么使用nodejs实现一个简单的网页爬虫功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网页源码  使用http.get()方法获取网页源码,以hao1...
    99+
    2023-06-06
  • 在Java中使用Jsoup实现一个爬虫功能
    在Java中使用Jsoup实现一个爬虫功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 Java 爬虫工具Jsoup详解Jsoup是一款 Java 的 HTML 解...
    99+
    2023-05-31
    java 爬虫 jsoup
  • Java中怎么实现一个网络爬虫
    Java中怎么实现一个网络爬虫,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先介绍每个类的功能:DownloadPage.java的功能是下载此超链接的页面源代码.Fun...
    99+
    2023-06-17
  • 利用JAVA实现一个多线程爬虫
    利用JAVA实现一个多线程爬虫?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JAVA 多线程爬虫实例详解前言以前喜欢Python的爬虫是出于他的简洁,但到了后期...
    99+
    2023-05-31
    java 多线程 爬虫
  • java Spring Boot2.7实现一个简单的爬虫功能
    首先 我们要在 pom.xml 中注入Jsoup 这是一个简单的java爬虫框架 org.jsoup jsoup 1.14.1 然后这里我们直接用main吧 做简单一点 我们创建一...
    99+
    2023-10-03
    java spring boot 爬虫
  • 如何利用C++实现一个简单的网页爬虫程序?
    如何利用C++实现一个简单的网页爬虫程序?简介:互联网是一个信息的宝库,而通过网页爬虫程序可以轻松地从互联网上获取大量有用的数据。本文将介绍如何使用C++编写一个简单的网页爬虫程序,以及一些常用的技巧和注意事项。一、准备工作安装C++编译器...
    99+
    2023-11-04
    C++ 网页爬虫 程序实现
  • 使用nodejs实现网页爬虫功能的案例
    这篇文章主要介绍了使用nodejs实现网页爬虫功能的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网页源码使用http.get()方法获取网页源码,以hao123网站的头...
    99+
    2023-06-06
  • 使用Java怎么实现一个网页截屏功能
    使用Java怎么实现一个网页截屏功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:package awtDemo;import j...
    99+
    2023-05-30
    java
  • nodejs中怎么实现一个多页面爬虫
    这期内容当中小编将会给大家带来有关nodejs中怎么实现一个多页面爬虫,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。request 用于请求地址和快速下载图片流。 htt...
    99+
    2024-04-02
  • 利用Java怎么实现一个画板功能
    今天就跟大家聊聊有关利用Java怎么实现一个画板功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图...
    99+
    2023-05-31
    java ava
  • 怎么在hadoop中实现一个java爬虫
    今天就跟大家聊聊有关怎么在hadoop中实现一个java爬虫,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。需要用到Cygwin:一个在windows平台上运行的类UNIX模拟环境,直...
    99+
    2023-05-31
    java ava hadoop
  • 利用Java怎么实现一个分页查询并显示功能
    本篇文章为大家展示了利用Java怎么实现一个分页查询并显示功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。sql语句大概形式为:select * from table limit 开始索...
    99+
    2023-05-31
    java 分页查询 ava
  • 利用java怎么实现一个倒计时功能
    这期内容当中小编将会给大家带来有关利用java怎么实现一个倒计时功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码如下:package timer;import java.util.Calendar;...
    99+
    2023-05-31
    java ava
  • 在SpringBoot中利用Websocket实现一个网页聊天功能
    这篇文章将为大家详细讲解有关在SpringBoot中利用Websocket实现一个网页聊天功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导入websocket的包。通过使用SpringB...
    99+
    2023-05-31
    springboot websocket bs
  • 使用python爬虫怎么实现一个发送短信验证码功能
    本篇文章为大家展示了使用python爬虫怎么实现一个发送短信验证码功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内联代码片。import timedef get_time()...
    99+
    2023-06-06
  • 利用java怎么实现一个动态加载功能
    今天就跟大家聊聊有关利用java怎么实现一个动态加载功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java动态加载类的意义和目的:Java动态加载类主要是为了不改变主程序代码,通...
    99+
    2023-05-31
    java ava
  • 使用Android爬虫怎么模拟一个登录功能
    这篇文章将为大家详细讲解有关使用Android爬虫怎么模拟一个登录功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实例代码:package com.yasin;import&nb...
    99+
    2023-05-30
    android
  • 怎么在java中实现一个多线程爬虫
    怎么在java中实现一个多线程爬虫?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android...
    99+
    2023-06-14
  • 利用java怎么实现一个四舍五入功能
    这期内容当中小编将会给大家带来有关利用java怎么实现一个四舍五入功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作