<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # JSoup 教程 原文:http://zetcode.com/java/jsoup/ JSoup 教程是 JSoup HTML 解析器的入門指南。 在本教程中,我們將解析 HTML 字符串,本地 HTML 文件和網頁中的 HTML 數據。 我們將清理數據并執行 Google 搜索。 ## JSoup JSoup 是用于提取和處理 HTML 數據的 Java 庫。 它實現了 HTML5 規范,并將 HTML 解析為與現代瀏覽器相同的 DOM。 該項目的網站是 [jsoup.org](https://jsoup.org) 。 ## JSoup 功能 使用 JSoup,我們能夠: * 從 URL,文件或字符串中抓取并解析 HTML * 使用 DOM 遍歷或 CSS 選擇器查找和提取數據 * 處理 HTML 元素,屬性和文本 * 根據安全的白名單清除用戶提交的內容,以防止 XSS 攻擊 * 輸出整潔的 HTML ## JSoup Maven 依賴項 在本教程的示例中,我們使用以下 Maven 依賴關系。 ```java <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.12.1</version> </dependency> ``` ## `JSoup`類 `JSoup`類通過其靜態方法為 jsoup 函數提供了核心公共訪問點。 例如,`clean()`方法清理 HTML 代碼,`connect()`方法創建與 URL 的連接,或者`parse()`方法解析 HTML 內容。 ## JSoup 解析 HTML 字符串 在第一個示例中,我們將解析一個 HTML 字符串。 `com/zetcode/JSoupFromStringEx.java` ```java package com.zetcode; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JSoupFromStringEx { public static void main(String[] args) { String htmlString = "<html><head><title>My title</title></head>" + "<body>Body content</body></html>"; Document doc = Jsoup.parse(htmlString); String title = doc.title(); String body = doc.body().text(); System.out.printf("Title: %s%n", title); System.out.printf("Body: %s", body); } } ``` 該示例分析 HTML 字符串并輸出其標題和正文內容。 ```java String htmlString = "<html><head><title>My title</title></head>" + "<body>Body content</body></html>"; ``` 此字符串包含簡單的 HTML 數據。 ```java Document doc = Jsoup.parse(htmlString); ``` 使用`Jsoup`的`parse()`方法,我們解析 HTML 字符串。 該方法返回一個 HTML 文檔。 ```java String title = doc.title(); ``` 文檔的`title()`方法獲取文檔的`title`元素的字符串內容。 ```java String body = doc.body().text(); ``` 文檔的`body()`方法返回`body`元素; 其`text()`方法獲取元素的文本。 ## JSoup 解析本地 HTML 文件 在第二個示例中,我們將解析本地 HTML 文件。 我們使用重載的`Jsoup.parse()`方法,該方法將`File`對象作為其第一個參數。 `index.html` ```java <!DOCTYPE html> <html> <head> <title>My title</title> <meta charset="UTF-8"> </head> <body> <div id="mydiv">Contents of a div element</div> </body> </html> ``` 對于示例,我們使用上面的 HTML 文件。 `com/zetcode/JSoupFromFileEx.java` ```java package com.zetcode; import java.io.File; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; public class JSoupFromFileEx { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/index.html"; Document doc = Jsoup.parse(new File(fileName), "utf-8"); Element divTag = doc.getElementById("mydiv"); System.out.println(divTag.text()); } } ``` 該示例將分析`src/main/resources/`目錄中的`index.html`文件。 ```java Document doc = Jsoup.parse(new File(fileName), "utf-8"); ``` 我們使用`Jsoup.parse()`方法解析 HTML 文件。 ```java Element divTag = doc.getElementById("mydiv"); ``` 使用文檔的`getElementById()`方法,我們通過元素的 ID 獲得元素。 ```java System.out.println(divTag.text()); ``` 使用元素的`text()`方法檢索標簽的文本。 ## JSoup 讀取網站的標題 在以下示例中,我們將抓取并解析網頁,然后檢索`title`元素的內容。 `com/zetcode/JSoupTitleEx.java` ```java package com.zetcode; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JSoupTitleEx { public static void main(String[] args) throws IOException { String url = "http://webcode.me"; Document doc = Jsoup.connect(url).get(); String title = doc.title(); System.out.println(title); } } ``` 在代碼示例中,我們讀取了指定網頁的標題。 ```java Document doc = Jsoup.connect(url).get(); ``` Jsoup 的`connect()`方法創建到給定 URL 的連接。 `get()`方法執行 GET 請求并解析結果; 它返回一個 HTML 文檔。 ```java String title = doc.title(); ``` 使用文檔的`title()`方法,我們獲得 HTML 文檔的標題。 ## JSoup 讀取 HTML 源碼 下一個示例檢索網頁的 HTML 源。 `com/zetcode/JSoupHTMLSourceEx.java` ```java package com.zetcode; import java.io.IOException; import org.jsoup.Jsoup; public class JSoupHTMLSourceEx { public static void main(String[] args) throws IOException { String webPage = "http://webcode.me"; String html = Jsoup.connect(webPage).get().html(); System.out.println(html); } } ``` 該示例打印網頁的 HTML。 ```java String html = Jsoup.connect(webPage).get().html(); ``` `html()`方法返回元素的 HTML; 在我們的案例中,整個文檔的 HTML 源代碼。 ## JSoup 獲取信息 HTML 文檔的元信息提供有關網頁的結構化元數據,例如其描述和關鍵字。 `com/zetcode/JSoupMetaInfoEx.java` ```java package com.zetcode; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JSoupMetaInfoEx { public static void main(String[] args) throws IOException { String url = "http://www.jsoup.org"; Document document = Jsoup.connect(url).get(); String description = document.select("meta[name=description]").first().attr("content"); System.out.println("Description : " + description); String keywords = document.select("meta[name=keywords]").first().attr("content"); System.out.println("Keywords : " + keywords); } } ``` 該代碼示例檢索有關指定網頁的元信息。 ```java String keywords = document.select("meta[name=keywords]").first().attr("content"); ``` 文檔的`select()`方法查找與給定查詢匹配的元素。 `first()`方法返回第一個匹配的元素。 使用`attr()`方法,我們獲得`content`屬性的值。 ## JSoup 解析鏈接 下一個示例分析 HTML 頁面中的鏈接。 `com/zetcode/JSoupLinksEx.java` ```java package com.zetcode; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JSoupLinksEx { public static void main(String[] args) throws IOException { String url = "http://jsoup.org"; Document document = Jsoup.connect(url).get(); Elements links = document.select("a[href]"); for (Element link : links) { System.out.println("link : " + link.attr("href")); System.out.println("text : " + link.text()); } } } ``` 在該示例中,我們連接到網頁并解析其所有鏈接元素。 ```java Elements links = document.select("a[href]"); ``` 要獲取鏈表,我們使用文檔的`select()`方法。 ## JSoup 清理 HTML 數據 Jsoup 提供了用于清理 HTML 數據的方法。 `com/zetcode/JSoupSanitizeEx.java` ```java package com.zetcode; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.safety.Cleaner; import org.jsoup.safety.Whitelist; public class JSoupSanitizeEx { public static void main(String[] args) { String htmlString = "<html><head><title>My title</title></head>" + "<body><center>Body content</center></body></html>"; boolean valid = Jsoup.isValid(htmlString, Whitelist.basic()); if (valid) { System.out.println("The document is valid"); } else { System.out.println("The document is not valid."); System.out.println("Cleaned document"); Document dirtyDoc = Jsoup.parse(htmlString); Document cleanDoc = new Cleaner(Whitelist.basic()).clean(dirtyDoc); System.out.println(cleanDoc.html()); } } } ``` 在示例中,我們清理并清理 HTML 數據。 ```java String htmlString = "<html><head><title>My title</title></head>" + "<body><center>Body content</center></body></html>"; ``` HTML 字符串包含不推薦使用的`center`元素。 ```java boolean valid = Jsoup.isValid(htmlString, Whitelist.basic()); ``` `isValid()`方法確定字符串是否為有效的 HTML。 白名單是可以通過清除程序的 HTML(元素和屬性)列表。 `Whitelist.basic()`定義了一組基本的干凈 HTML 標記。 ```java Document dirtyDoc = Jsoup.parse(htmlString); Document cleanDoc = new Cleaner(Whitelist.basic()).clean(dirtyDoc); ``` 借助`Cleaner`,我們清理了臟的 HTML 文檔。 ```java The document is not valid. Cleaned document <html> <head></head> <body> Body content </body> </html> ``` 這是程序的輸出。 我們可以看到中心元素已被刪除。 ## JSoup 執行 Google 搜索 以下示例使用 Jsoup 執行 Google 搜索。 `com/zetcode/JsoupGoogleSearchEx.java` ```java package com.zetcode; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupGoogleSearchEx { private static Matcher matcher; private static final String DOMAIN_NAME_PATTERN = "([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,15}"; private static Pattern patrn = Pattern.compile(DOMAIN_NAME_PATTERN); public static String getDomainName(String url) { String domainName = ""; matcher = patrn.matcher(url); if (matcher.find()) { domainName = matcher.group(0).toLowerCase().trim(); } return domainName; } public static void main(String[] args) throws IOException { String query = "Milky Way"; String url = "https://www.google.com/search?q=" + query + "&num=10"; Document doc = Jsoup .connect(url) .userAgent("Jsoup client") .timeout(5000).get(); Elements links = doc.select("a[href]"); Set<String> result = new HashSet<>(); for (Element link : links) { String attr1 = link.attr("href"); String attr2 = link.attr("class"); if (!attr2.startsWith("_Zkb") && attr1.startsWith("/url?q=")) { result.add(getDomainName(attr1)); } } for (String el : result) { System.out.println(el); } } } ``` 該示例為`"Milky Way"`一詞創建搜索請求。 它會打印十個與該術語匹配的域名。 ```java private static final String DOMAIN_NAME_PATTERN = "([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,15}"; private static Pattern patrn = Pattern.compile(DOMAIN_NAME_PATTERN); ``` Google 搜索返回長鏈接,我們要從中獲取域名。 為此,我們使用正則表達式模式。 ```java public static String getDomainName(String url) { String domainName = ""; matcher = patrn.matcher(url); if (matcher.find()) { domainName = matcher.group(0).toLowerCase().trim(); } return domainName; } ``` `getDomainName()`使用正則表達式匹配器從搜索鏈接返回域名。 ```java String query = "Milky Way"; ``` 這是我們的搜索詞。 ```java String url = "https://www.google.com/search?q=" + query + "&num=10"; ``` 這是執行 Google 搜索的網址。 ```java Document doc = Jsoup .connect(url) .userAgent("Jsoup client") .timeout(5000).get(); ``` 我們連接到 URL,設置 5s 超時,然后發送 GET 請求。 返回 HTML 文檔。 ```java Elements links = doc.select("a[href]"); ``` 從文檔中,我們選擇鏈接。 ```java Set<String> result = new HashSet<>(); for (Element link : links) { String attr1 = link.attr("href"); String attr2 = link.attr("class"); if (!attr2.startsWith("_Zkb") && attr1.startsWith("/url?q=")) { result.add(getDomainName(attr1)); } } ``` 我們尋找不具有`class="_Zkb"`屬性并且具有`href="/url?q="`屬性的鏈接。 請注意,這些是硬編碼的值,將來可能會更改。 ```java for (String el : result) { System.out.println(el); } ``` 最后,我們將域名打印到終端。 ```java en.wikipedia.org www.space.com www.nasa.gov sk.wikipedia.org www.bbc.co.uk imagine.gsfc.nasa.gov www.forbes.com www.milkywayproject.org www.youtube.com www.universetoday.com ``` 這些是`"Milky Way"`一詞的 Google 頂級搜索結果。 本教程專門針對 Jsoup HTML 解析器。 您可能也對相關教程感興趣: [Java 教程](/lang/java/),[用 Java 讀取網頁](/articles/javareadwebpage/),[用 Java 閱讀文本文件](/articles/javareadtext/)或 [Jtwig 教程](/java/jtwig/)。 列出[所有 Java 教程](/all/#java)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看