千家信息网

Java怎么进行HTML数据采集

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍"Java怎么进行HTML数据采集",在日常操作中,相信很多人在Java怎么进行HTML数据采集问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎
千家信息网最后更新 2024年11月11日Java怎么进行HTML数据采集

这篇文章主要介绍"Java怎么进行HTML数据采集",在日常操作中,相信很多人在Java怎么进行HTML数据采集问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎么进行HTML数据采集"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

关于group正则

说到正则表达式是如何帮助java进行html页面采集,这里简要需要提一下正则表达式中的group方法:

public static void main(String[] args){          //Pattern 用于编译正则  这里用到了3个正则 分别用括号()包住         //匹配URL 当然这里的正则不一定准确 这个匹配URL的正则就是错误的 只是在这里刚好能匹配出来         //第2个正则是用于匹配标题 SoFlash的       //第3个正则用于匹配日期         /*这里只用了一条语句便把url,标题和日期全部给匹配出来了*/          Pattern p = Pattern.compile("='(\\w.+)'>(\\w.+[a-zA-Z])-(\\d{1,2}\\.\\d{1,2}\\.\\d{4})");          String s = "SoFlash-12.22.2011";          Matcher m = p.matcher(s);         while(m.find()){             //通过调用group()方法里的索引 将url,标题和日期全部给打印出来             System.out.println("打印出url链接:"+m.group(1));             System.out.println("打印出标题:"+m.group(2));              System.out.println("打印出日期:"+m.group(3));              System.out.println();             }          System.out.println("group方法捕获的数据个数:"+m.groupCount()+ "个");        }

我们看下输出结果:

打印出url链接:www.cnblogs.com/longwu
打印出标题:SoFlash
打印出日期:12.22.2011

group方法捕获的数据个数:3个

想了解更多的朋友请看 JAVA 正则表达式 (超详细)

如果之前没有学过正则的可以看看这个 正则表达式的元字符匹配

好了 group方法介绍完了 我们来简单的使用下 group采集某个足球网站页面的数据

页面链接:http://www.footballresults.org/league.php?all=1&league=EngPrem

首先我们读取整个html页面,并打印出来 代码如下:

public static void main(String[] args) {          String strUrl = "http://www.footballresults.org/league.php?all=1&league=EngPrem";          try {              // 创建一个url对象来指向 该网站链接 括号里()装载的是该网站链接的路径              // 更多可以看看 http://wenku.baidu.com/view/8186caf4f61fb7360b4c6547.html              URL url = new URL(strUrl);              // InputStreamReader 是一个输入流读取器 用于将读取的字节转换成字符              // 更多可以看看 http://blog.sina.com.cn/s/blog_44a05959010004il.html               InputStreamReader isr = new InputStreamReader(url.openStream(),                      "utf-8"); // 统一使用utf-8 编码模式              // 使用 BufferedReader 来读取 InputStreamReader 转换成的字符              BufferedReader br = new BufferedReader(isr);              // 如果 BufferedReader 读到的内容不为空              while (br.readLine() != null) {                  // 则打印出来 这里打印出来的结果 应该是整个网站的                  System.out.println(br.readLine());              }              br.close(); // 读取完成后关闭读取器          } catch (IOException e) {              // 如果出错 抛出异常              e.printStackTrace();          }      }

打印出来的结果 是整个html页面的源代码 (部分截图如下)

到这里,数据已经成功采集下来了,当然 我们想要的并不是整个html源代码,我们需要的是网页上的比赛数据。

首先 我们分析下 html源代码结构 来到http://www.footballresults.org/league.php?all=1&league=EngPrem 页面

右键该页面 点击 ‘查看源文件’ 如图:

我们来看看 其内部的html代码结构 以及我们需要的数据

其对应的页面数据

这时候,强大的正则表达式派上用场了, 我们需要写几个用来匹配我们需要数据的正则

这里需要用到 3个正则 包括 日期, 2个球队的(主队和客队) 以及比赛结果的 如下

String regularDate = "(\\d{1,2}\\.\\d{1,2}\\.\\d{4})"; //日期正则  String regularTwoTeam = ">[^<>][^<>]*"; //球队正则   String regularResult = ">(\\d{1,2}-\\d{1,2})"; //比赛结果正则

写好正则 我们便可以使用该正则来获取 我们想要得到的数据了

首先 我们写一个GroupMethod类 用于存放regularGroup()方法

import java.util.regex.Matcher;  import java.util.regex.Pattern;  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 ""; // 否则返回一个空值         }      }  }

然后是写主函数代码

对比下 html上的数据 (部分截图-初始阶段)

输出结果(部分截图-结束阶段)

对比下 html上的数据 (部分截图-结束阶段)

好了 这样的html数据采集就完成了 :)

当然这里只是抓取了一个页面的内容如果感兴趣,想抓去更多的页面内容,你可以分析下该链接后的联盟名。例如 league=EngPrem 通过改变league名来获取所有联盟的比赛数据你可以写个接口把所有球队的名字放进去,当然还有更智能的方法你可以写个方法,从http://www.footballresults.org/allleagues.php 页面获取所有球队的名字 然后来附加到 "http://www.footballresults.org/league.php?all=1&league=" 链接后面 来补齐链接 循环读取各个联盟比赛页面的内容。

到此,关于"Java怎么进行HTML数据采集"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

正则 数据 页面 方法 链接 日期 更多 结果 数据采集 标题 网站 表达式 比赛 内容 截图 源代码 球队 部分 学习 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手游世界战争英雄怎么换服务器 金蝶远程服务器被删了咋办 车辆预约平台的服务器加载不出来 服务器权限组重载指令 软件开发工具排行 无锡防爆刀片服务器销售 软件开发的都做些什么工作 网络安全自动装置考试试题 软件开发手册 什么意思 mq数据库 最大的物流软件开发商 锐菲网络技术有限公司招聘 软件开发人员叫什么 新建的SQL数据库在哪 网络安全管理中最核心要求是 网络安全重于泰山国旗下讲话美篇 互联网科技公司经营类目选择 广东综合软件开发价格对比 t3单位名称数据库 python无线网络安全 网络安全教育知识资料小学生 德宏网络安全前途 软件开发文档分为 网络安全员兼职是干什么的 核心服务器启动服务器管理器 服务器如何开通外网 梦幻当前服务器经验基数 我的世界生存服务器地址 湖北项目软件开发怎么样 大数据在网络安全
0