之前写过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():尝试查找与该模式匹配的输入序列的下一个子序列。

  1. package com.lcw.curl;
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3.  
  4. public class GetData {
  5.  
  6. /**
  7. *
  8. * @param regex 正则表达式
  9. * @param content 所要匹配的内容
  10. * @return
  11. */
  12. public String getData(String regex,String content){
  13. Pattern pattern=Pattern.compile(regex, Pattern.CASE_INSENSITIVE);//设定正则表达式,不区分大小写
  14. Matcher matcher=pattern.matcher(content);
  15. if(matcher.find()){
  16. return matcher.group();
  17. }else{
  18. return "";
  19. }
  20. }
  21.  
  22. }

CurlMain.java(主程序)

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

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

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

  1. package com.lcw.curl;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5. import java.net.URL;
  6.  
  7. public class CurlMain {
  8.  
  9. /**
  10. * @param args
  11. */
  12. public static void main(String[] args) {
  13. try {
  14. String address="http://www.footballresults.org/league.php?league=EngDiv1";
  15. URL url=new URL(address);
  16. InputStreamReader inputStreamReader=new InputStreamReader(url.openStream(),"utf-8");//打开地址,以UTF-8编码的形式返回字节并转为字符
  17. BufferedReader bufferedReader=new BufferedReader(inputStreamReader);//从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
  18.  
  19. GetData data=new GetData();
  20. String content="";//用来接受每次读取的行字符
  21. int flag=0;//标志,队伍信息刚好在日期信息后面,则正则相同,用于分离数据
  22. String dateRegex="\\d{1,2}\\.\\d{1,2}\\.\\d{4}";//日期匹配正则表达式
  23. String teamRegex=">[^<>]*</a>";//队伍匹配正则表达式
  24. String scoreRegex=">(\\d{1,2}-\\d{1,2})</TD>";//比分正则表达式
  25. int i=0;//记录信息条数
  26.  
  27. while((content=bufferedReader.readLine())!=null){//每次读取一行数据
  28. //获取比赛日期信息
  29. String dateInfo=data.getData(dateRegex, content);
  30. if(!dateInfo.equals("")){
  31. System.out.println("日期:"+dateInfo);
  32. flag++;
  33. }
  34. //获取队伍信息,需先读到日期信息让标志符自增
  35. String teamInfo=data.getData(teamRegex, content);
  36. if(!teamInfo.equals("")&&flag==1){
  37. teamInfo=teamInfo.substring(1, teamInfo.indexOf("</a>"));
  38. System.out.println("主队:"+teamInfo);
  39. flag++;
  40. }else if (!teamInfo.equals("") && flag == 2) {
  41. teamInfo = teamInfo.substring(1, teamInfo.indexOf("</a>"));
  42. System.out.println("客队:" + teamInfo);
  43. flag = 0;
  44. }
  45. //获取比分信息
  46. String scoreInfo=data.getData(scoreRegex, content);
  47. if(!scoreInfo.equals("")){
  48. scoreInfo=scoreInfo.substring(1, scoreInfo.indexOf("</TD>"));
  49. System.out.println("比分:"+scoreInfo);
  50. System.out.println();
  51. i++;
  52. }
  53.  
  54. }
  55. bufferedReader.close();
  56. System.out.println("一共收集到了"+i+"条信息");
  57. } catch (Exception e) {
  58. e.printStackTrace();
  59. }
  60.  
  61. }
  62.  
  63. }

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

基于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. bootStrap中的ul导航2

    <!doctype html><html > <head> <meta charset="utf-8"> <link rel= ...

  2. unity3d 射线的原理,基础用法

    射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 . Ray射线类和RaycastHit射线投射信息类是射线中常用的两个工具类. 用途:射线多 ...

  3. C# 格式化新招

    C# 格式化新招 ) from Attribute_Item where AttributeSysNo=$AttributeSysNo and Name='$Name' and SysNo !=$Sy ...

  4. Linux学习笔记10—Linux下chkconfig命令详解

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法: chkconfig [--a ...

  5. javascript 原生常用api 数组方法大全

     <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. WindowManager$BadTokenException: Unable to add window permission denied for this window type

    10-11 11:47:27.472: E/AndroidRuntime(12804): java.lang.RuntimeException: Unable to start activity Co ...

  7. Knockout.Js官网学习(Mapping高级用法二)

    使用ignore忽略不需要map的属性 如果在map的时候,你想忽略一些属性,你可以使用ignore累声明需要忽略的属性名称集合: " }; var mapping = { 'ignore' ...

  8. Kubernetes命名空间

    本文环境为Kubernetes V1.11,操作系统版本为 CentOs 7.3,Kubernetes集群安装可以参考 kubeadm安装kubernetes V1.11.1 集群 1. 什么是Nam ...

  9. Intellij IDEA 自动清除无效 import 和 清除无效 import 的快捷键 ctrl+alt+o

    快捷键 ctrl+alt+o 自动清除的配置方法 可以settings-general-auto import-java项,勾选optimize imports on the fly,在当前项目下会自 ...

  10. 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo(转)

    热衷于开源框架探索的我发现ASP.NET MVC与jQuery easyUI的组合很给力.由于原先一直受Ext JS框架的licence所苦恼,于是痛下决心寻找一个完全免费的js框架——easyUI. ...