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

基于Java的数据采集(二)

发布时间:2021-07-06 06:08:23 所属栏目:大数据 来源: https://www.jb51.cc
导读:在上一篇文章《基于Java的数据采集(一)》:http://www.cnblogs.com/lichenwei/p/3904715.html 提到了如何如何读取网页源代码,并通过group正则 动态抓取我们所需要的网页数据 现在来写下关于数据的存储,思路很简单,只需要在我们每次读取一个数据的时候,

在上一篇文章《基于Java的数据采集(一)》:http://www.cnblogs.com/lichenwei/p/3904715.html

提到了如何如何读取网页源代码,并通过group正则 动态抓取我们所需要的网页数据

现在来写下关于数据的存储,思路很简单,只需要在我们每次读取一个数据的时候,把数据存放在临时变量,然后插入数据库即可。

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

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

先来建一个表:

DoMysqL.java(数据库连接类,并提供插入数据的方法)

 1 package com.lcw.curl;
 2 
 3 
 4 import java.sql.Connection;
 5  java.sql.DriverManager;
 6  java.sql.sqlException;
 7  java.sql.Statement;
 8 
 9 
10 public class DoMysqL {
11   
12     //定义MysqL驱动,数据库地址,数据库用户名 密码,执行语句和数据库连接  
13     public String driver = "com.MysqL.jdbc.Driver";
14     public String url = "jdbc:MysqL://127.0.0.1:3306/football"15     public String user = "root"16     public String password = ""17     public Statement stmt = null18     public Connection conn = 19     
20     创建一个插入数据的方法
21     void datatoMysqL(String insertsql) {
22 
23         try {
24             25                 Class.forName(driver).newInstance();
26             } catch (Exception e) {
27             28                 e.printStackTrace();
29             }
30             创建连接
31             conn = DriverManager.getConnection(url,user,password);
32             创建一个 Statement 对象来将 sql 语句发送到数据库
33             stmt = conn.createStatement();
34         }  (sqlException e) {
35             e.printStackTrace();
36         }
37         38             执行sql 插入语句
39             stmt.executeUpdate(insertsql);
40         } 41 42 43         44             stmt.close();
45             conn.close();
46         } 47 48 49     }
50     
51 }

?

GetData.java(过滤数据类)

 3  java.util.regex.Matcher;
 java.util.regex.Pattern;
 5 
 GetData {
 7     
 8     /**
 9      * 
     * @param regex 正则表达式
11  content 所要匹配的内容
12 @return
13      */
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主程序类:

 java.io.BufferedReader;
 java.io.InputStreamReader;
 java.net.URL;
 6 
 CurlMain {
 9      args
11      static  main(String[] args) {
13 
14         15             String address = "http://www.footballresults.org/league.PHP?league=EngDiv1"16             URL url = new URL(address);
17             InputStreamReader inputStreamReader =  InputStreamReader(url
18                     .openStream(),"utf-8"); 打开地址,以UTF-8编码的形式返回字节并转为字符
19             BufferedReader bufferedReader =  BufferedReader(
20                     inputStreamReader); 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
21 
22             GetData data =  GetData();
23             DoMysqL MysqL =  DoMysqL();
24             String content = ""; 用来接受每次读取的行字符
25             int flag = 0; 标志,队伍信息刚好在日期信息后面,则正则相同,用于分离数据
26             String dateRegex = "d{1,2}.d{1,2}.d{4}"; 日期匹配正则表达式
27             String teamRegex = ">[^<>]*</a>"; 队伍匹配正则表达式
28             String scoreRegex = ">(d{1,2}-d{1,2})</TD>"; 比分正则表达式
29             String tempDate=""30             String teama=""31             String teamb=""32             String score=""33             int i = 0; 记录信息条数
34             String sql = ""35 
36             while ((content = bufferedReader.readLine()) != null) { 每次读取一行数据
37                  获取比赛日期信息
38                 String dateInfo = data.getData(dateRegex,content);
39                 if (!dateInfo.equals("")) {
40                     System.out.println("日期:" + dateInfo);
41                     tempDate=dateInfo;
42                     flag++43                 }
44                  获取队伍信息,需先读到日期信息让标志符自增
45                 String teamInfo = data.getData(teamRegex,1)">46                 if (!teamInfo.equals("") && flag == 1) {
47                     teama = teamInfo.substring(1,teamInfo
48                             .indexOf("</a>"));
49                     System.out.println("主队:" + teama);
50                     flag++51                 } else if (!teamInfo.equals("") && flag == 252                     teamb = teamInfo.substring(153                             .indexOf("</a>"54                     System.out.println("客队:" + teamb);
55                     flag = 056 57                  获取比分信息
58                 String scoreInfo = data.getData(scoreRegex,1)">59                 if (!scoreInfo.equals(""60                     score = scoreInfo.substring(161                             .indexOf("</TD>"62                     System.out.println("比分:" + score);
63                     System.out.println();
64                     i++65                     sql = "insert into football(`date`,`teama`,`teamb`,`score`) values('"
66                             + tempDate
67                             + "','"
68                             + teama
69                             + "',1)">70                             + teamb
71                             + "',1)">72                             + score + "')"73                     System.out.println(sql);
74                     MysqL.datatoMysqL(sql);
75 76 
77 78             bufferedReader.close();
79             System.out.println("一共收集到了" + i + "条信息");
80         } 81 82 83 
84 85 
86 }

?

看下运行效果图:

?

下一篇文章:《基于Java的数据采集(三)》:http://www.cnblogs.com/lichenwei/p/3905370.html

(编辑:北几岛)

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

    推荐文章
      热点阅读