之前写过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. 项目出现小红叉,类名上带有 Implicit错误

    Implicit super constructor Object() is undefined for default constructor. Must define an explicit co ...

  2. db2调优

    系统上线两个月左右,请IBM工程师对数据库进行了一次调优,主要收获感觉有以下几点: 1,应用服务器一定要与数据库服务器分开 2,如果存在多个数据库,一定要硬盘分开(io忙) 3,每个数据库的数据与日志 ...

  3. AngularJS中实现Model缓存

    在AngularJS中如何实现一个Model的缓存呢? 可以通过在Provider中返回一个构造函数,并在构造函数中设计一个缓存字段,在本篇末尾将引出这种做法. 一般来说,Model要赋值给Scope ...

  4. WPF获取当前用户控件的父级窗体

    方式一.通过当前控件名获取父级窗体 Window targetWindow = Window.GetWindow(button); 方式二.通过当前控件获取父级窗体 Window parentWind ...

  5. sublime text3全局设置

    1.快捷键 ctrl+shift+p 2.输入 PackageResourceViewer 3.找到后 Open Resource 打开  , 4.选择 Theme-default,鼠标双击Theme ...

  6. Wordpress无法连接Mysql8的问题

    安装了mysql 8.0.11 之后本地可以登录,但是远程第三方工具无法连接,本地安装的Wordpress在初始化时也连接失败.防火墙已经放通的, 解决之道: 首先登陆到mysql命令行: mysql ...

  7. Linux系统如何将某一程序设置为开机自启动

    文章来源:百度知道. Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍L ...

  8. 那天有个小孩教我WCF[一][2/3]

    接着上次的继续讲吧 我们开始吧 9.创建数据库 use master go --创建库 if exists(select * from sysdatabases where name='NewsDB' ...

  9. 物联网架构成长之路(10)-Nginx负载均衡

    0. 前言 关于Nginx负载均衡的简单配置,我以前博客配置过基于HTTP的负载均衡.这次的负载均衡有点不一样,就是基于TCP的负载均衡.基于HTTP负载均衡是默认的Nginx版本支持的,配置也很简单 ...

  10. pandas DataFrame(3)-轴

    和numpy数组(5)-二维数组的轴一样,pandas DataFrame也有轴的概念,决定了方法是对行应用还是对列应用: 以下面这个数据为例说明: 这个数据是5个车站10天内的客流数据: rider ...