加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

基于Java的数据采集(一)

发布时间:2021-05-21 05:07:26 所属栏目:大数据 来源: https://www.jb51.cc
导读:之前写过2篇关于PHP数据采集入库的文章: 基于PHP数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3872307.html 基于PHP数据采集入库(二):http://www.cnblogs.com/lichenwei/p/3873281.html ? 《基于Java的数据采集(二)》:http://www.cnblogs

之前写过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

@L_502_3@

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

?

CurlMain.java(主程序)

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

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

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

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

?

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

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读