网站程序自带的采集器采集文章(如何在html采集到的数据采集页面2011-2012赛季英超球队战绩)
优采云 发布时间: 2022-02-06 11:20网站程序自带的采集器采集文章(如何在html采集到的数据采集页面2011-2012赛季英超球队战绩)
核心提示:本期概述在上一期中,我们学习了如何将html采集中的数据存储到MySql数据库中。本期,我们将学习如何查询存储的数据,我们实际上想查看数据。数据采集page 2011-2012英超球队记录如果是初学者以下...
这个问题的概述
上一期我们学习了如何将html采集中的数据存入MySql数据库。本期我们将学习如何在存储的数据中查询我们真正想看到的数据。
数据采集2011-2012赛季英超球队战绩
如果您是初学者,以下内容可能会对您有所帮助
在使用java操作MySql数据库之前,我们需要在工程文件中导入一个jar包(mysql-connector-java-5.1.18-bin)
可以在MySql官网下载Connector/J5.1.18
第一次使用MySql?请参阅 java 与 MYSQL 的连接
请看这个Eclipse下如何导入jar包
如果你是初学者,想使用MySql数据库,可以到这里从XAMPP中文官网下载XAMPP包
XAMPP(Apache+MySQL+PHP+PERL)是一款功能强大的XAMPP软件站搭建集成软件包,一键安装,无需修改配置文件,非常好用。
关于如何在MySql中创建数据库,请看Java Web Data采集器示例教程【第二部分-数据存储】。
数据库准备好了,我们开始写java程序代码;
本期我们主要在MySql类中增加了一个数据查看方法queryMySql(),并增加了一个DataQuery类,里面收录了一些查询游戏结果的方法。
主程序代码
这里简单介绍一下每个类及其收录的方法
Data采集AndStorage 类和其中的dataCollectAndStore() 方法用于Html 数据采集和存储
<IMG SRC="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<p>import java.io.BufferedReader;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px">import java.io.IOException;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px">import java.io.InputStreamReader;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px">import java.net.URL;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px">/**<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> * DataCollectionAndStorage类 用于数据的收集和存储<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> * @author SoFlash - 博客园 http://www.cnblogs.com/longwu<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> */<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px">public class DataCollectionAndStorage {<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> /**<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> * dataCollectAndStore()方法 用于Html数据收集和存储<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> */<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> public void dataCollectAndStore() {<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 首先用一个字符串 来装载网页链接<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String strUrl = "http://www.footballresults.org/league.php?all=1&league=EngPrem";<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> <BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String sqlLeagues = "";<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> try {<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 创建一个url对象来指向 该网站链接 括号里()装载的是该网站链接的路径<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 更多可以看看 http://wenku.baidu.com/view/8186caf4f61fb7360b4c6547.html<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> URL url = new URL(strUrl);<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // InputStreamReader 是一个输入流读取器 用于将读取的字节转换成字符<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 更多可以看看 http://blog.sina.com.cn/s/blog_44a05959010004il.html<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> InputStreamReader isr = new InputStreamReader(url.openStream(),<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> "utf-8"); // 统一使用utf-8 编码模式<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 使用 BufferedReader 来读取 InputStreamReader 转换成的字符<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> BufferedReader br = new BufferedReader(isr);<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String strRead = ""; // new 一个字符串来装载 BufferedReader 读取到的内容<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"><BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 定义3个正则 用于获取我们需要的数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String regularDate = "(\\d{1,2}\\.\\d{1,2}\\.\\d{4})";<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String regularTwoTeam = ">[^]*</a>";<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String regularResult = ">(\\d{1,2}-\\d{1,2})";<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"><BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //创建 GroupMethod类的对象 gMethod 方便后期调用其类里的 regularGroup方法<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> GroupMethod gMethod = new GroupMethod();<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //创建DataStructure数据结构 类的对象 用于数据下面的数据存储<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> DataStructure ds = new DataStructure();<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //创建MySql类的对象 用于执行MySql语句<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> MySql ms = new MySql();<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> int i = 0; // 定义一个i来记录循环次数 即收集到的球队比赛结果数<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> int index = 0; // 定义一个索引 用于获取分离 2个球队的数据 因为2个球队正则是相同的<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 开始读取数据 如果读到的数据不为空 则往里面读<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> while ((strRead = br.readLine()) != null) {<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> /**<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> * 用于捕获日期数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> */<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> String strGet = gMethod.regularGroup(regularDate, strRead);<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 如果捕获到了符合条件的 日期数据 则打印出来<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> <BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> if (!strGet.equals("")) {<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //System.out.println("Date:" + strGet);<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //将收集到的日期存在数据结构里<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> ds.date = strGet;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 这里索引+1 是用于获取后期的球队数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> ++index; // 因为在html页面里 源代码里 球队数据是在刚好在日期之后<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> }<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> /**<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> * 用于获取2个球队的数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> */<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> strGet = gMethod.regularGroup(regularTwoTeam, strRead);<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> if (!strGet.equals("") && index == 1) { // 索引为1的是主队数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 通过subtring方法 分离出 主队数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> strGet = strGet.substring(1, strGet.indexOf("</a>"));<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //System.out.println("HomeTeam:" + strGet); // 打印出主队<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //将收集到的主队名称 存到 数据结构里<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> ds.homeTeam = strGet;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> index++; //, 索引+1之后 为2了<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 通过subtring方法 分离出 客队<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> } else if (!strGet.equals("") && index == 2) { // 这里索引为2的是客队数据<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> strGet = strGet.substring(1, strGet.indexOf("</a>"));<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //System.out.println("AwayTeam:" + strGet); // 打印出客队<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> //将收集到的客队名称 存到数据结构里<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> ds.awayTeam = strGet;<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> index = 0; //收集完客队名称后 需要将索引还原 用于收集下一条数据的主队名称<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> }<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> /**<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> * 用于获取比赛结果<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> */<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> strGet = gMethod.regularGroup(regularResult, strRead);<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> if (!strGet.equals("")) {<BR style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px"> // 这里同样用到了substring方法 来剔除'