3使用Jsoup解析Java中HTML文件的示例
HTML是Web的核心,無論您是通過JavaScript,JSP,PHP,ASP還是任何其他Web技術動態生成的,您在Internet上看到的所有頁面都是基于HTML的。 您的瀏覽器實際上是解析HTML并為您呈現。 但是,如果需要解析HTML文檔并查找某些元素,標簽,屬性或檢查特定元素是否存在,該怎么辦,所有這些操作都使用Java程序完成。
如果您從事Java編程已經有幾年了,我相信您已經使用DOM和SAX之類的解析器完成了一些XML解析工作。 具有諷刺意味的是,很少有需要從核心Java應用程序解析HTML文檔的情況,該應用程序不包括Servlet和其他Java Web技術。 更糟的是,核心JDK中也沒有HTTP或HTML庫。 這就是為什么在解析HTML文件時 ,許多Java程序員不得不看Google以了解如何獲取Java中HTML標記的價值。
當我需要時,我確定會有一個開源庫為我實現該功能,但不知道它像JSoup一樣出色且功能豐富。 它不僅提供了讀取和解析HTML文檔的支持,而且還允許您從HTML文件,其屬性, JQuery樣式的CSS類中提取任何元素,同時還允許您對其進行修改。 您可以使用Jsoup對HTML文檔進行任何操作。
在本文中,我們將解析和HTML文件,并找出title和heading標簽的值。 我們還將看到通過使用Java解析Google主頁來從文件以及任何URL或Internet下載和解析HTML的示例。
Jsoup是用于處理實際HTML的開源Java庫。 它提供了使用DOM,CSS和類似jquery的最好方法提取和處理數據的非常方便的API。 Jsoup實現WHATWG HTML5規范,并將HTML解析為與現代瀏覽器(例如Chrome和Firefox)相同的DOM。 這是jsoup庫的一些有用的功能:
- Jsoup可以從URL,文件或字符串中抓取并解析HTML
- Jsoup可以使用DOM遍歷或CSS選擇器來查找和提取數據
- Jsoup允許您操縱HTML元素,屬性和文本
- Jsoup針對安全的白名單提供干凈的用戶提交的內容,以防止XSS攻擊
- Jsoup還可以輸出整潔HTML
Jsoup旨在處理現實世界中發現的各種HTML,其中包括經過正確驗證HTML以完成不完整的非驗證標簽集合。 Jsoup的核心優勢之一是它非常強大。
在此Java HTML解析教程中,我們將看到使用jsoup在Java中解析和遍歷HTML文檔的三個不同示例。 在第一個示例中,我們將解析一個HTML String ,其內容均為標記,以Java中的String文字形式出現。 在第二個示例中,我們將從網絡上下載HTML文檔,在第三個示例中,我們將加載我們自己的示例HTML文件login.html進行解析。 此文件是一個示例HTML文檔,在正文部分包含一個標題標簽和一個div,其中div包含一個HTML表單。 它具有輸入標簽來捕獲用戶名和密碼,并提供提交和重置按鈕以采取進一步措施。 這是可以驗證的正確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()方法來從String,文件,基本URI,URL和InputStream中讀取HTML文件。 如果它們不是“ UTF-8”格式,也可以指定字符編碼以正確讀取HTML文件。
parse(String html)方法將輸入HTML解析為新的Document。 在Jsoup中,文檔擴展了元素,該元素擴展了Node。 同樣,TextNode擴展了Node。 只要您傳遞非null字符串 ,就可以確保您使用包含(至少)head和body元素的Document進行了成功,明智的解析。 擁有文檔后,可以通過在Document及其父類Element和Node中調用適當的方法來獲取所需的數據。
這是我們完整的Java程序,用于解析HTML字符串,從Internet下載HTML文件和來自本地文件系統HTML文件。 為了運行該程序,您可以使用Eclipse IDE,也可以僅使用任何IDE或命令提示符 。 在Eclipse中,這非常簡單,只需復制此代碼,創建一個新的Java項目,右鍵單擊src包并將其粘貼。 Eclipse將負責創建具有相同名稱的正確的程序包和Java源文件,因此絕對省事。 如果您已經有一個Sample Java項目,那么這只是一步。 以下Java程序顯示了3個解析和遍歷HTML文件的示例。 在第一個示例中,我們直接解析具有html內容的String ,在第二個示例中,我們解析從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 libraryString 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 URLDocument 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"); // wrongDocument htmlFile = null;try {htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} // righttitle = htmlFile.title();Element div = htmlFile.getElementById("login");String cssClass = div.className(); // getting class form HTML elementSystem.out.println("Jsoup can also parse HTML file directly");System.out.println("title : " + title);System.out.println("class of div tag : " + cssClass);}}Output: 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創建干凈的解析,而不管HTML的格式是否正確。 它可以處理以下錯誤:
未關閉的標簽(例如<p> Java <p> Scala到<p> Java </ p> <p> Scala </ p>)
隱式標簽(例如ega裸<td> Java很棒</ td>包裹在<table> <tr> <td>中) 可靠地創建文檔結構(html包含頭和主體,并且頭中僅包含適當的元素)。
Jsoup是一個出色且強大的開源庫,它使讀取html文檔,正文片段,html字符串以及直接從Web上直接解析html內容變得非常容易。
翻譯自: https://www.javacodegeeks.com/2014/09/3-examples-of-parsing-html-file-in-java-using-jsoup.html
總結
以上是生活随笔為你收集整理的3使用Jsoup解析Java中HTML文件的示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cdr对象页面居中快捷键(cdr水平居中
- 下一篇: 使用纯HTML和OmniFaces构建动