Java实现网页数据采集
<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实现网页数据采集相关推荐
- java研发网页数据采集
我觉得网页数据采集是一个不道德的行为,但是我喜欢.下面就说说我为什么喜欢. 某一天,小编看到喜欢的网页,很欣赏这个原创作者的作品,但由于小编穷,没法开通vip去下载资源,所以小编就运用一些网络技术进行 ...
- java多线程数据采集,【多线程数据采集课题】java采集网页数据方法
[多线程数据采集专题]java采集网页数据方法 java多线程网络数据采集 第一步抓取数据. java采集网页数据.获取html文本节点 有几种办法.转载文章请注明来处:http://blog.cs ...
- java web 截图_如何以Java实现网页截图技术
今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...
- java抓取网页css,Java 读取网页Html资料
当前位置:我的异常网» HTML/CSS » Java 读取网页Html资料 Java 读取网页Html资料 www.myexceptions.net 网友分享于:2013-10-27 浏览:13 ...
- JSP房地产门户管理系统myeclipse开发mysql数据库BS模式java编程网页结构详细设计
一.源码特点 JSP 房地产门户管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8 ...
- JAVA制作网页的软件有哪些,html5开发工具(开发html5网页的软件有哪些)
html5开发工具 1.SublimeText SublimeText是一个跨渠道的代码编bai辑器,一起支持duWindows.Linux.MacOSX等操作系统,也是HTML和散文zhi先进的文本 ...
- 【JAVA】网页版登录注册系统2.0
前言 JAVA实现网页的登录与注册2.0版 一.环境的搭建 导入1.0版本的项目Java实现网页版登录注册系统-Java文档类资源-CSDN文库可参考[JAVA]网页版登录注册系统_Lx_Hy_的博客 ...
- 【JAVA】网页版登录注册系统
目录 前言 一.环境的搭建 二.功能实现 1.登录功能 2.注册功能 [注意] 总结 前言 JAVA实现网页的登录与注册 一.环境的搭建 1.创建Maven Web工程,参考[JAVA]Web服务器- ...
- Java Script网页特效实例大全
Java Script网页特效实例大全 2009年06月27日 JavaScript是一种简洁的.面向对象的.跨平台的描述语言,是一种专门用来开发Internet客户端和服务端的应用程序.使用Java ...
最新文章
- 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
- 数据库分页存储过程(5)
- C语言之计算大数阶乘,如计算100!和1000!等~~~
- 【Android工具】安卓应用市场哪家强?chrome浏览器apk下载插件,play安装包下载,妈妈再也不用担心我找不到安装包了...
- 为什么long类型的变量需要加L初始化
- 触发器批量更新 用游标,一个一个处理
- lacp可以在access接口吗_【思唯网络学院】【干货】LACP与PAGP是什么?有何区别?...
- 转:C# 中 MSCHART 饼状图显示百分比
- maven打包报错:-source 1.5 中不支持 diamond 运算符
- 拍频和混频 PD拍频
- Intel傲腾存储黑科技终极版:DIMM内存条明年到来
- 中文文本关键词抽取的三种方法(TF-IDF、TextRank、word2vec)
- 深度长文:我对CQRS/EventSourcing架构的思考
- Excel如何实现两个工作表数据的对比
- egret 白鹭笔记(2020)简单笔记
- 【游戏人生】一个游戏程序员的学习资料
- Redis删除(del)key后内存无法释放的原因和解决方案
- Oracle的查询排序,增加总计列,或者增加总计行
- 自然语言理解中的意图识别
- 影楼后期修图调色ps神器插件下载_安装教程
热门文章
- C++的界面库经过几天来的搜索,总结了下面几种的优缺点
- 玩幻宠大冒险显示服务器连接失败,别客汇星球之幻宠大冒险首测 体验五星级指尖竞技...
- element-ui el-input “type=number“的上下箭头去掉
- 如何实现高效联表查询
- 邮件那些事4—浅析伪造发信人的原理与识别
- Java简易实现LRU算法
- JNA 调用 DLL
- 前端-Ajax和JSON解析数据
- python3 - 使用 jieba3k 对直播平台房间标题进行分词
- 使用CSS实现“文段尾行渐变消失”