之前写过2篇关于PHP数据采集入库的文章:

基于PHP数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3872307.html

基于PHP数据采集入库(二):http://www.cnblogs.com/lichenwei/p/3873281.html

《基于Java的数据采集(二)》:http://www.cnblogs.com/lichenwei/p/3905370.html

《基于Java数据采集入库(三)》:http://www.cnblogs.com/lichenwei/p/3907007.html

《基于Java数据采集入库(终结篇)》:http://www.cnblogs.com/lichenwei/p/3910492.html

其实采集的原理都是一样的:远程获取信息->提取所需内容(正则)->分类存储->读取->展示

用什么编程语言没所谓,编程语言只是种工具

这次来采集一个足球网站的数据:http://www.footballresults.org/league.php?league=EngDiv1

下图是我们要采集的数据:

好了,关于采集原理就看上面那2篇文章吧,剩下的直接上代码:

GerData.java(采集数据方法封装)

其实也就是简单的匹配正则:

group():返回在以前匹配操作期间由给定组捕获的输入子序列。

find():尝试查找与该模式匹配的输入序列的下一个子序列。

 package com.lcw.curl;
 import java.util.regex.Matcher;
import java.util.regex.Pattern; public class GetData { /**
*
* @param regex 正则表达式
* @param content 所要匹配的内容
* @return
*/
public String getData(String regex,String content){
Pattern pattern=Pattern.compile(regex, Pattern.CASE_INSENSITIVE);//设定正则表达式,不区分大小写
Matcher matcher=pattern.matcher(content);
if(matcher.find()){
return matcher.group();
}else{
return "";
}
} }

CurlMain.java(主程序)

InputStreamReader()是字节流通向字符流的桥梁。

InputStreamReader()是字节流通向字符流的桥梁。

openStream()打开到此URL的连接并返回一个用于从该连接读入的字节流。

 package com.lcw.curl;

 import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL; public class CurlMain { /**
* @param args
*/
public static void main(String[] args) {
try {
String address="http://www.footballresults.org/league.php?league=EngDiv1";
URL url=new URL(address);
InputStreamReader inputStreamReader=new InputStreamReader(url.openStream(),"utf-8");//打开地址,以UTF-8编码的形式返回字节并转为字符
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。 GetData data=new GetData();
String content="";//用来接受每次读取的行字符
int flag=0;//标志,队伍信息刚好在日期信息后面,则正则相同,用于分离数据
String dateRegex="\\d{1,2}\\.\\d{1,2}\\.\\d{4}";//日期匹配正则表达式
String teamRegex=">[^<>]*</a>";//队伍匹配正则表达式
String scoreRegex=">(\\d{1,2}-\\d{1,2})</TD>";//比分正则表达式
int i=0;//记录信息条数 while((content=bufferedReader.readLine())!=null){//每次读取一行数据
//获取比赛日期信息
String dateInfo=data.getData(dateRegex, content);
if(!dateInfo.equals("")){
System.out.println("日期:"+dateInfo);
flag++;
}
//获取队伍信息,需先读到日期信息让标志符自增
String teamInfo=data.getData(teamRegex, content);
if(!teamInfo.equals("")&&flag==1){
teamInfo=teamInfo.substring(1, teamInfo.indexOf("</a>"));
System.out.println("主队:"+teamInfo);
flag++;
}else if (!teamInfo.equals("") && flag == 2) {
teamInfo = teamInfo.substring(1, teamInfo.indexOf("</a>"));
System.out.println("客队:" + teamInfo);
flag = 0;
}
//获取比分信息
String scoreInfo=data.getData(scoreRegex, content);
if(!scoreInfo.equals("")){
scoreInfo=scoreInfo.substring(1, scoreInfo.indexOf("</TD>"));
System.out.println("比分:"+scoreInfo);
System.out.println();
i++;
} }
bufferedReader.close();
System.out.println("一共收集到了"+i+"条信息");
} catch (Exception e) {
e.printStackTrace();
} } }

数据轻松采集,效果如下图:

基于Java的数据采集(一)的更多相关文章

  1. 基于Java的数据采集(二)

    在上一篇文章<基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html 提到了如何如何读取网页源代码,并通过group ...

  2. 基于Java的数据采集(三)

    <基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html <基于Java的数据采集(二)>:http:/ ...

  3. 基于Java的数据采集(终结篇)

    关于写过关于JAVA采集入库的三篇文章: 基于Java数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3904715.html 基于Java数据采集入库(二) ...

  4. 基于Java Mina框架的部标jt808服务器设计和开发

    在开发部标GPS平台中,部标jt808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言.需要购买jt808GPS服务器源码 ...

  5. 9个基于Java的搜索引擎框架

    在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广 ...

  6. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  7. 基于Java的打包jar、war、ear包的作用与区别详解

      本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下   以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...

  8. 基于Java Netty框架构建高性能的部标808协议的GPS服务器

    使用Java语言开发一个高质量和高性能的jt808 协议的GPS通信服务器,并不是一件简单容易的事情,开发出来一段程序和能够承受数十万台车载接入是两码事,除去开发部标808协议的固有复杂性和几个月长周 ...

  9. 基于Java Mina框架的部标808服务器设计和开发

    在开发部标GPS平台中,部标808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言. 我们为客户开发的部标服务器基于Min ...

随机推荐

  1. 潭州课堂25班:Ph201805201 爬虫基础 第八课 selenium (课堂笔记)

    Selenium笔记(1)安装和简单使用 简介 Selenium是一个用于Web应用程序测试的工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, ...

  2. python 元组和字典中元素作为函数调用参数传递

    模式1.  def test1(*args): test3(*args) def test2(**kargs): test3(**kargs) def test3(a, b): print(a,b) ...

  3. react-native开源组件react-native-wechat学习

    转载链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/react-native-open-source-components-r ...

  4. java之静态方法与非静态方法

    1.静态方法最大的特点就是,不用生成类的实例对象,直接可以用. 2.它的语法格式:<类名|实例名>.<类变量名> 3.Java中的静态方法中,在方法声明时前面要加static ...

  5. Microsoft.mshtml.dll 添加引用及类型选择错误问题解决办法

    在比较早的文章中,提到使用 Microsoft.mshtml.dll 进行模拟浏览器点击的例子. 1.添加引用的问题 一般在开发环境下会在三个地方存有microsoft.mshtml.dll文件.所以 ...

  6. 版本视图找不到数据 EDITIONING VIEW

    Oracle database 12 以后的版本,特别在EBS R12.2.X加入了版本视图这种技术,跟MOAC有点像. CREATE OR REPLACE FORCE EDITIONING VIEW ...

  7. 移动基于Percona XTRADB Cluster的大数据解决方式

    移动基于Percona XTRADB Cluster的大数据解决方式          一.移动的去IOE之旅      近期由于"棱镜门"事件的曝光.引起了国家对信息安全问题的注 ...

  8. JavaScript比较两个对象的值是否相等

    JavaScript比较两个对象的值是否相等 function isObjectValueEqual(a, b) { var aProps = Object.getOwnPropertyNames(a ...

  9. Android属性allowBackup安全风险浅析

    1.allowBackup安全风险描述 Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifes ...

  10. 【转】Vmware14安装Centos7无法上网问题的解决

    原文链接 1. 选择Net模式 修改配置子网ip. 修改子网的IP不要和本机的IP地址在同一个网段 比如本机IP地址信息: 无线局域网适配器 WLAN: 连接特定的 DNS 后缀 . . . . . ...