zoukankan      html  css  js  c++  java
  • 简谈java解析HTML(org.jsoup.nodes.Document)

    这篇文章主要是简单谈一下在开发工程中遇到的一个问题:解析HTML,用作记录方便自己以后查阅。

    这次需要解析HTML用到的类是org.jsoup.nodes.Document。maven项目可以在pom.xml添加下面的依赖包获得该类的相关jar包。

    <!-- 解析html -->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.8.3</version>
            </dependency>

      jsoup不仅可以解析本地的HTML文件,还可以解析来自URL的HTML文件。下面分别来说一下如何解析这两种方式。

    • 本地HTML文件

      在获取本地HTML文件演示中,顺便介绍jsoup这个解析器的一个简单功能。我们先看如下页面:

     假设这是 一个某班级的成绩列表,其中发现第二条记录姓名是没有数据的,怎么办?有人说,是数据库数据不全导致的,检查数据库数据。但是别忘了,这个是一个已经生成好了的静态HTML页面,如果通过学号201200401112查询数据库,姓名是有数据的。这时候我们该如何给学号为201200401112的这位同学加上姓名呢?先抛开如何实现,有些人会有疑问这样的业务场景是否存在呢?可以告诉你,在我工作不到一年中,就遇到这样的业务场景。大概业务是这样的,当初要生成这个静态页面是因为要保存当时业务数据,提供以后查阅,至于为什么不用数据库保存当时记录,是因为这个关乎签章,总之是有这样的情况的。那么,进入如何去实现刚刚的那个问题,看代码:

    @RequestMapping("/addName")
        public void addName(HttpServletResponse response) throws IOException {
            //设置响应字符编码
            response.setCharacterEncoding("UTF-8");
            //获取本地文件
            String filePath = "G:\HBuilder\bqjrlogin\score.html";
            File file = new File(filePath);
            Document doc = Jsoup.parse(file, "UTF-8");
            //获取td标签集合
            Elements tds = doc.getElementsByTag("td");
            //在td集合标签中,在第九个添加姓名
            tds.get(9).appendText("张大胖");
            response.getWriter().write(doc.toString());
            response.getWriter().flush();
            response.getWriter().close();
        }

    运行结果:

    丢失的姓名回来了。这里添加的姓名是写死的,在实际开发中可以查询数据库,添加数据的数据。

    Document doc = Jsoup.parse(file, "UTF-8"); 就这样,就可以解析到本地的HTML文件,具体实现注释中已写明。

    • URL获取的HTML文件

    跟解析本地HTML差不多,还是直接看代码:

    package com.wh.util;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.IOException;
    
    public class Test {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
    
        public static void main(String[] args) {
            try {
                Document doc = Jsoup.connect("http://weixin.res.meizu.com/mx6/index.html").get();
                //获取页面的标题
                String title = doc.title();
                LOGGER.info(title);
            } catch (IOException e) {
                LOGGER.error("Test.main() error:" + e);
            }
    
        }
    
    }

    跟解析本地HTML文件唯一不一样的就是:

     Document doc = Jsoup.connect("http://weixin.res.meizu.com/mx6/index.html").get();
    获取到URL地址的HTML文件后,其他操作都样。这里演示了如何获取到URL为:
    http://weixin.res.meizu.com/mx6/index.html的标题。运行结果如下:

    当然了,除了获取标题之外还可以对当前页面做很多操作,比如获取图片的标签src的地址,等等。这里只是简单做个例子,起到抛砖引玉作用,更多功能,需要深究。

    
    
  • 相关阅读:
    平易近人、兼容并蓄——Spark SQL 1.3.0概览
    System.getProperty
    Apache Commons CLI 简介
    The declared package does not match the expected package
    Maven常用命令
    使用SBT构建Scala应用(转自git)
    Area Under roc Curve(AUC)
    用特征来实现混入(mix-in)式的多重继承
    暗时间
    SVN如何commit(提交)项目代码
  • 原文地址:https://www.cnblogs.com/WHqingwei/p/5878849.html
Copyright © 2011-2022 走看看