JavaRush /Java Blog /Random-TW /如何使用 Jsoup 在 Java 中解析 HTML 檔案的 3 個範例
Sdu
等級 17

如何使用 Jsoup 在 Java 中解析 HTML 檔案的 3 個範例

在 Random-TW 群組發布
如何使用 Jsoup 在 Java 中解析 HTML 檔案的 3 個範例 - 1HTML是WEB的核心,你看到的所有網路頁面,無論是使用JavaScript、JSP、PHP、ASP或其他Web技術動態產生的,都是基於HTML的。事實上,您的瀏覽器會解析 HTML 並以您方便的方式顯示它。但是,如果您需要解析 HTML 文件並尋找其中的某些元素、標籤、屬性,或使用 Java 程式檢查特定元素是否存在,該怎麼辦?如果您已經成為 Java 程式設計師多年,我相信您會使用 DOM 或 SAX 等解析器來完成 XML 解析。但諷刺的是,有時您需要從不包含 Servlet 和其他 Java Web 技術的基本 Java 應用程式中解析 HTML 文件。而且,Core JDK也不包含HTTP或HTML函式庫。這就是為什麼,當談到解析 HTML 檔案時,許多 Java 程式設計師會詢問 Google 如何在 Java 中取得 HTML 標籤的值。當我遇到這個問題時,我確信解決方案將是實現我需要的功能的開源庫,但我不知道它會像 Jsoup 一樣精彩且功能豐富。它不僅支援讀取和解析 JQuery 風格的 HTML 檔案、屬性、CSS 類,同時還允許您修改它們。使用 Jsoup,您可以對 HTML 文件執行任何您想要的操作。在本文中,我們將解析 HTML 檔案並尋找標籤的名稱和屬性。我們還將查看從文件和任何 URL(例如 Google 主頁)下載和解析 HTML 的範例。

什麼是Jsoup

Jsoup 是一個用於處理真實 HTML 的開源 Java 函式庫。它提供了一個非常方便的 API,用於使用最好的 DOM、CSS 和類似 jQuery 的技術來檢索和操作資料。Jsoup 實作了 WHATWG HTML5 規範,並將 HTML 解析為與 Chrome 和 Firefox 等現代瀏覽器相同的 DOM。以下是 Jsoup 函式庫的一些有用功能:
  • Jsoup 可以從 URL、檔案或字串中抓取和解析 HTML。
  • Jsoup 可以使用 DOM 遍歷或 CSS 選擇器來尋找和提取資料。
  • Jsoup 可讓您操作 HTML 元素、屬性和文字。
  • Jsoup 提供對使用者提供的資訊進行白名單清理,以防止 XSS 攻擊。
  • Jsoup 還可以產生「簡潔」的 HTML。
Jsoup 旨在處理現實世界中存在的各種 HTML,包括經過正確驗證的 HTML 以及不完整、未經驗證的標籤集。Jsoup 的主要優點之一是它的可靠性。

使用 Jsoup 在 Java 中解析 HTML

在本教程中,我們將看到使用 Jsoup 在 Java 中解析和遍歷 HTML 文件的三個不同範例。在第一個範例中,我們將解析一個包含 Java 字串文字形式的標籤的 HTML 字串。在第二個範例中,我們將從 Internet 下載 HTML 文檔,在第三個範例中,我們將下載自己的範例 HTML 文件 login.html 進行解析。該文件是一個範例 HTML 文檔,在包含 HTML 表單的「身體」部分中包含「title」標籤和「div」標籤。此表單包含用於輸入使用者名稱和密碼的字段,以及用於進一步操作的重置和確認按鈕。這是可以透過「有效性」檢查的「正確」HTML,這表示所有標籤和屬性都正確關閉。這就是我們的 HTML 檔案的樣子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
使用 Jsoup 解析 HTML 非常容易,您所需要做的就是呼叫靜態方法Jsoup.parse()並將 HTML 字串傳遞給它。Jsoup 提供了幾種重載方法parse(),用於從字串、文件、基本 URI、URL 和InputStream. 如果 HTML 檔案不是 UTF-8 格式,您也可以指定編碼以正確讀取該檔案。此方法parse(String html)將傳入的 HTML 解析為新物件Document。在Jsoup中,一個類別Document繼承自一個類Element,該類別擴展了該類別Node。該類別也Node繼承自該類別TextNode。只要將非空字串傳遞給該方法,就可以保證對Document包含(至少)「head」和「body」元素的物件進行成功、有意義的解析。如果您有一個對象Document,則可以透過呼叫該類別及其父類別的適當方法來取得所需的Document資料。 ElementNode

用於解析 HTML 文件的 Java 程式

這是我們用於解析 HTML 字串、從互聯網下載的 HTML 檔案和本機 HTML 檔案的完整程式。要運行它,您可以使用 IDE(Eclipse 或任何其他)或命令列。在 Eclipse 中這非常簡單,只需複製此程式碼,建立一個新的 Java 項目,右鍵單擊「src」資料夾並貼上複製的程式碼。Eclipse 將負責創建具有適當名稱的適當套件和原始程式碼文件,因此工作量減少了很多。如果您已經有一個 Java 項目,那麼這只是第一步。下面的程式示範了解析和遍歷 HTML 檔案的三個範例。在第一個範例中,我們直接解析包含 HTML 的字串,在第二個範例中,我們從 URL 下載 HTML 文件,在第三個範例中,我們從本機檔案系統下載並解析 HTML 文件。
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
輸出:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Jsoup HTML 解析器將盡一切努力對您提供的 HTML 進行「乾淨」的解析,無論其格式是否良好。它可以處理以下錯誤:
  • 未封閉的標籤。例如,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • 隱含標籤。例如,打開的<td>Java is Great</td>將被包裹在<table><tr><td>
  • Jsoup 建立健壯的文件結構(HTML 包含 head 和 body,但 body 僅包含相關元素)
Jsoup是一個優秀且可靠的開源庫,它使讀取html文檔、正文片段、html字串以及直接解析html網頁內容變得非常簡單。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION