Java网页数据采集器[下篇-数据查询]

qsuron 发布于 2014-02-20 Java 45 次阅读 无~ 1132 字 预计阅读时间: 5 分钟


DataStructure类 一个简单的数据结构 用于收集到数据的临时性存储
/**
 * DataStructure 类 一个简单的数据结构
 * @author SoFlash - 博客园  http://www.cnblogs.com/longwu
 */
public class DataStructure {
    //定义数据字段
    public String homeTeam;
    public String awayTeam;
    public String date;
    public String result;
}
GroupMethod类 里面包含了regularGroup() 方法 用于匹配并获取 html的数据
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * GroupMethod 类 用于匹配和抓取 html页面的数据
 * @author SoFlash - 博客园  http://www.cnblogs.com/longwu
 */
public class GroupMethod {
    // 传入2个字符串参数 一个是pattern(我们使用的正则) 另一个matcher是html源代码
    public String regularGroup(String pattern, String matcher) {
        Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(matcher);
        if (m.find()) { // 如果读到
            return m.group();// 返回捕获的数据
        } else {
            return ""; // 否则返回一个空字符串
        }
    }
}

MySql类 里面含有2个方法

  • datatoMySql() 方法 用于向数据库里插入数据
  • queryMySql() 方法 用于查看数据库里存储的数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * MySql类用于实施MySql数据库操作
 * @author SoFlash - 博客园  http://www.cnblogs.com/longwu
 */
public class MySql {

    // 定义MySql驱动,数据库地址,数据库用户名 密码, 执行语句和数据库连接
    public String driver = "com.mysql.jdbc.Driver";
    public String url = "jdbc:mysql://127.0.0.1:3306/htmldatacollection";
    public String user = "root";
    public String password = "root";
    public Statement stmt = null;
    public Connection conn = null;

    /**
     * 创建一个插入数据的方法  executeUpdate()
     * @param insertSQl
     */
    public void datatoMySql(String insertSQl) {

        try {
            try {
                Class.forName(driver).newInstance();
            } catch (Exception e) {
                System.out.println("无法找到驱动器");
                e.printStackTrace();
            }
            // 创建连接
            conn = DriverManager.getConnection(url, user, password);
            // 创建一个 Statement 对象来将 SQL 语句发送到数据库
            stmt = conn.createStatement();
            // 执行SQL 插入语句
            stmt.executeUpdate(insertSQl);
            // 执行完 停止执行语句
            stmt.close();
            // 执行完关闭数据库连接
            conn.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 创建一个用于select查看数据的方法 executeQuery();
     * @param strSelect
     * @return ResultSet
     */
    public ResultSet queryMySql(String strSelect) {
        // 创建一个数据集 用于获取查询到的行数据
        ResultSet rs = null;
        try {
            Class.forName(driver).newInstance();
        } catch (Exception e) {
            System.out.println("无法找到驱动器!");
            e.printStackTrace();
        }

        try {
            // 创建连接
            conn = DriverManager.getConnection(url, user, password);
            // 创建一个 Statement 对象来将 SQL 语句发送到数据库
            stmt = conn.createStatement();
            // 执行查询语句   获取ResultSet对象
            rs = stmt.executeQuery(strSelect);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        //返回结果集
        return rs;
    }
}
Main 主函数 用于数据输出
import java.util.List;
import java.util.Scanner;
import java.util.Vector;
/**
 * Main 主函数 用于数据的输出
 * @author SoFlash - 博客园  http://www.cnblogs.com/longwu
 */
public class Main {
    public static void main(String[] args) {
        DataCollectionAndStorage dcs = new DataCollectionAndStorage();
        DataQuery dQuery = new DataQuery();

        while (true) {
            System.out.println("清空数据库-请按1");
            System.out.println("收集英超比赛数据-请按2");
            System.out.println("查看英超所有球队-请按3");
            System.out.println("查看具体球队比赛结果-请按4");
            System.out.println("查看某一天的比赛-请按5");
            // Scanner 文本扫描器 用于读取 用户的输入
            Scanner sc = new Scanner(System.in);
            int intInput = sc.nextInt();
            if (intInput == 1) {
                dQuery.initialDataBase();
                System.out
                        .println("---------------------------------------------");
            } else if (intInput == 2) {
                dcs.dataCollectAndStore();
                System.out
                        .println("---------------------------------------------");
            } else if (intInput == 3) {
                //获取 查询到的所有球队名称
                Vector vecAllTeams = dQuery.getAllTeams();
                if (vecAllTeams.size() != 0) {
                    System.out.println("参加过比赛的球队如下:");
                    System.out
                            .print("-----------------------------------------------");
                    System.out
                            .print("-----------------------------------------------rn");
                    for (int i = 0; i < vecAllTeams.size(); i++) {
                        if (i % 7 == 0 && i != 0) {
                            System.out.println("rn");
                        }
                        System.out.print(vecAllTeams.get(i) + "t");
                    }
                } else
                    System.out.print("数据库目前没有数据,请按2收集数据!");
                System.out
                        .print("rn---------------------------------------------");
                System.out
                        .println("-----------------------------------------------rn");
            } else if (intInput == 4) {
                System.out.println("请输入你要查看的球队");
                Scanner scLeague = new Scanner(System.in);
                String strLeague = scLeague.next();
                //获取 具体球队的比赛结果
                Vector lsResult = dQuery.querySpecifiedTeam(strLeague);
                if (lsResult.size() != 0) {
                    System.out.println("日期ttt主队tt客队tt比分");
                    for (int i = 0; i < lsResult.size(); i++) {
                        if (i % 4 == 0 && i != 0)
                            System.out.println();
                        System.out.print(lsResult.get(i) + "tt");
                    }
                } else
                    System.out.println("没有相关球队的记录或数据库没有数据!");
                System.out
                        .println("rn---------------------------------------------------");
            } else if (intInput == 5) {
                System.out.println("请输入你要查看的比赛日期  例子格式[14.01.2012]");
                Scanner scDate = new Scanner(System.in);
                String strDate = scDate.next();
                //获取具体日期下的 所有比赛
                List lsResulOnDate = dQuery.queryByDate(strDate);
                if (lsResulOnDate.size() != 0) {
                    System.out.println("日期ttt主队tt客队tt比分");
                    for (int i = 0; i < lsResulOnDate.size(); i++) {
                        if (i % 4 == 0 && i != 0)
                            System.out.println();
                        System.out.print(lsResulOnDate.get(i) + "tt");
                    }
                } else
                    System.out.println("该天没有比赛 或 数据库没有数据!");
                System.out
                        .println("rn---------------------------------------------------");
            }
        }

    }
}