簡談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的地址,等等。這里只是簡單做個例子,起到拋磚引玉作用,更多功能,需要深究。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM