<div class="markdown_views"><p>最近,由于某些需要,用Java制做了一个网页数据采集器,用于将网页中需要的数据采集下来。</p>

这里使用的方法,是先得到要采集的网页的源代码,然后从源代码中使用正则表达式得到要采集的数据。


用以下代码,我们就可以得到要采集数据的网站的源代码,并且在控制台输出。

        String urlStr = ""; // 网址try {//创建一个url对象来指向要采集信息的网址URL url = new URL(urlStr);//将读取到的字节转化为字符InputStreamReader inStrRead = new InputStreamReader(url.openStream(),"utf-8");//读取InputStreamReader转化成的字符BufferedReader bufRead = new BufferedReader(inStrRead); //读到的内容不为空while (bufRead.readLine() != null) {System.out.println(bufRead.readLine());}bufRead.close();} catch (IOException e) {e.printStackTrace();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

测试一下,这里使

String urlStr = "http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?&lang=";
  • 1

在控制台输出如下结果。

得到网页的源代码之后,我们就可以使用正则表达式来得到要采集的数据。

我们先查看网页源代码,对源代码进行分析。

这里想要采集的数据是

  • 城市
  • 时间
  • AQI指数
  • 空气质量级别

以北京市为例进行分析,我们得到如下正则表达式

    // 城市正则private String regularCity = ">[\u4e00-\u9fa5]{2,}市</td>"; // 日期正则private String regularDate = ">(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))</td>";// AQI指数正则private String regularAQI = ">[0-9]{2,}</td>"; // 空气质量级别正则private String regularQuality = ">[\u4e00-\u9fa5]</td>"; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

我们先定义一个方法,使用我们定义的正则表达式和得到的网页源代码采集数据。

    /** 从网页源代码中采集数据* * @param regular 正则* * @param code 源代码*/public String DataAcqu(String regular, String code) {// 编译正则表达式Pattern p = Pattern.compile(regular, Pattern.CASE_INSENSITIVE);Matcher m = p.matcher(code);if (m.find()) {// 返回采集到的数据return m.group();} else {return "";}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

然后就可以进行数据采集了。

    public DataCode() {// 用户输入网页地址Scanner scan = new Scanner(System.in); // 存储用户输入的网页地址String urlStr = scan.nextLine(); try {//创建一个url对象来指向要采集信息的网址URL url = new URL(urlStr); //将读取到的字节转化为字符InputStreamReader inStrRead = new InputStreamReader(url.openStream(),"utf-8"); //读取InputStreamReader转化成的字符BufferedReader bufRead = new BufferedReader(inStrRead);String readStr = "";// 创建一个DataAcqu类的对象(前面自己定义的用于采集数据的类)DataAcqu dataAcq = new DataAcqu();int i = 0; // 记录采集到的数据数量// 如果读到的数据不为空while ((readStr = bufRead .readLine()) != null) {// 采集城市数据String cityStr = dataAcq.DataAcqu(regularCity, readStr);// 如果采集到符合条件的数据,打印出来if (!cityStr.equals("")) {// 将采集到的数据前后多余部分去掉(前面正则表达式为了准确取到相应的值,加入了">"和"</td>")cityStr = cityStr.substring(1, cityStr.indexOf("</td>"));System.out.println("城市:" + cityStr);}// 采集日期数据String dateStr = dataAcq.DataAcqu(regularDate, readStr);// 如果采集到符合条件的数据,打印出来if (!dateStr.equals("")) {dateStr = dateStr.substring(1, dateStr.indexOf("</td>"));System.out.println("日期:" + dateStr);}// 采集AQI指数数据String AQIStr = dataAcq.DataAcqu(regularAQI, readStr);// 如果采集到符合条件的数据,打印出来if (!AQIStr.equals("")) {AQIStr = AQIStr.substring(1, AQIStr.indexOf("</td>"));System.out.println("AQI指数:" + AQIStr);}// 采集空气质量级别数据String qualityStr = dataAcq.DataAcqu(regularQuality, readStr);// 如果采集到符合条件的数据,打印出来if (!qualityStr.equals("")) {qualityStr = qualityStr.substring(1,qualityStr.indexOf("</td>"));System.out.println("空气质量级别:" + qualityStr);System.out.println();i++;}}br.close(); // 读取完成后关闭读取器System.out.println("采集完成,共采集到数据:" + i);} catch (IOException e) {e.printStackTrace();}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

运行后,控制台输出如下信息

如果想要将输出结果输出的文件中,只需在代码中添加如下代码

            // 将数据输出到文件PrintStream ps = new PrintStream("E:\\Java\\DataAcquisition\\data");//将输出位置切换到文件System.setOut(ps);
  • 1
  • 2
  • 3
  • 4

这样,我们的网页数据采集器就完成了。

Java实现网页数据采集相关推荐

  1. java研发网页数据采集

    我觉得网页数据采集是一个不道德的行为,但是我喜欢.下面就说说我为什么喜欢. 某一天,小编看到喜欢的网页,很欣赏这个原创作者的作品,但由于小编穷,没法开通vip去下载资源,所以小编就运用一些网络技术进行 ...

  2. java多线程数据采集,【多线程数据采集课题】java采集网页数据方法

    [多线程数据采集专题]java采集网页数据方法 java多线程网络数据采集  第一步抓取数据. java采集网页数据.获取html文本节点 有几种办法.转载文章请注明来处:http://blog.cs ...

  3. java web 截图_如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

  4. java抓取网页css,Java 读取网页Html资料

    当前位置:我的异常网» HTML/CSS » Java 读取网页Html资料 Java 读取网页Html资料 www.myexceptions.net  网友分享于:2013-10-27  浏览:13 ...

  5. JSP房地产门户管理系统myeclipse开发mysql数据库BS模式java编程网页结构详细设计

    一.源码特点      JSP 房地产门户管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8 ...

  6. JAVA制作网页的软件有哪些,html5开发工具(开发html5网页的软件有哪些)

    html5开发工具 1.SublimeText SublimeText是一个跨渠道的代码编bai辑器,一起支持duWindows.Linux.MacOSX等操作系统,也是HTML和散文zhi先进的文本 ...

  7. 【JAVA】网页版登录注册系统2.0

    前言 JAVA实现网页的登录与注册2.0版 一.环境的搭建 导入1.0版本的项目Java实现网页版登录注册系统-Java文档类资源-CSDN文库可参考[JAVA]网页版登录注册系统_Lx_Hy_的博客 ...

  8. 【JAVA】网页版登录注册系统

    目录 前言 一.环境的搭建 二.功能实现 1.登录功能 2.注册功能 [注意] 总结 前言 JAVA实现网页的登录与注册 一.环境的搭建 1.创建Maven Web工程,参考[JAVA]Web服务器- ...

  9. Java Script网页特效实例大全

    Java Script网页特效实例大全 2009年06月27日 JavaScript是一种简洁的.面向对象的.跨平台的描述语言,是一种专门用来开发Internet客户端和服务端的应用程序.使用Java ...

最新文章

  1. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
  2. 数据库分页存储过程(5)
  3. C语言之计算大数阶乘,如计算100!和1000!等~~~
  4. 【Android工具】安卓应用市场哪家强?chrome浏览器apk下载插件,play安装包下载,妈妈再也不用担心我找不到安装包了...
  5. 为什么long类型的变量需要加L初始化
  6. 触发器批量更新 用游标,一个一个处理
  7. lacp可以在access接口吗_【思唯网络学院】【干货】LACP与PAGP是什么?有何区别?...
  8. 转:C# 中 MSCHART 饼状图显示百分比
  9. maven打包报错:-source 1.5 中不支持 diamond 运算符
  10. 拍频和混频 PD拍频
  11. Intel傲腾存储黑科技终极版:DIMM内存条明年到来
  12. 中文文本关键词抽取的三种方法(TF-IDF、TextRank、word2vec)
  13. 深度长文:我对CQRS/EventSourcing架构的思考
  14. Excel如何实现两个工作表数据的对比
  15. egret 白鹭笔记(2020)简单笔记
  16. 【游戏人生】一个游戏程序员的学习资料
  17. Redis删除(del)key后内存无法释放的原因和解决方案
  18. Oracle的查询排序,增加总计列,或者增加总计行
  19. 自然语言理解中的意图识别
  20. 影楼后期修图调色ps神器插件下载_安装教程

热门文章

  1. C++的界面库经过几天来的搜索,总结了下面几种的优缺点
  2. 玩幻宠大冒险显示服务器连接失败,别客汇星球之幻宠大冒险首测 体验五星级指尖竞技...
  3. element-ui el-input “type=number“的上下箭头去掉
  4. 如何实现高效联表查询
  5. 邮件那些事4—浅析伪造发信人的原理与识别
  6. Java简易实现LRU算法
  7. JNA 调用 DLL
  8. 前端-Ajax和JSON解析数据
  9. python3 - 使用 jieba3k 对直播平台房间标题进行分词
  10. 使用CSS实现“文段尾行渐变消失”