java jsoup解析_3使用Jsoup解析Java中HTML文件的示例
java jsoup解析
HTML是Web的核心,無論您是通過JavaScript,JSP,PHP,ASP或任何其他Web技術(shù)動態(tài)生成的,您在Internet上看到的所有頁面都是基于HTML的。 您的瀏覽器實(shí)際上是解析HTML并為您呈現(xiàn)它。 但是,如果需要解析HTML文檔并查找某些元素,標(biāo)簽,屬性或檢查特定元素是否存在,該怎么辦,所有這些操作都使用Java程序完成。
如果您從事Java編程已經(jīng)有幾年了,我相信您已經(jīng)使用DOM和SAX之類的解析器完成了一些XML解析工作。 具有諷刺意味的是,很少有需要從核心Java應(yīng)用程序解析HTML文檔的情況,該應(yīng)用程序不包括Servlet和其他Java Web技術(shù)。 更糟的是,核心JDK中也沒有HTTP或HTML庫。 這就是為什么在解析HTML文件時 ,許多Java程序員不得不看Google以了解如何在Java中獲取HTML標(biāo)簽的價(jià)值。
當(dāng)我需要時,我確定會有一個開源庫可以為我實(shí)現(xiàn)該功能,但不知道它像JSoup一樣出色且功能豐富。 它不僅提供了讀取和解析HTML文檔的支持,而且還允許您從HTML文件,其屬性, JQuery樣式的CSS類中提取任何元素,同時還允許您對其進(jìn)行修改。 您可以使用Jsoup對HTML文檔執(zhí)行任何操作。
在本文中,我們將解析和HTML文件,并找出title和heading標(biāo)簽的值。 通過使用Java解析Google主頁,我們還將看到從文件以及任何URL或Internet下載和解析HTML的示例。
Jsoup是用于處理實(shí)際HTML的開源Java庫。 它提供了使用DOM,CSS和類似jquery的最佳方法來提取和處理數(shù)據(jù)的非常方便的API。 Jsoup實(shí)現(xiàn)WHATWG HTML5規(guī)范,并將HTML解析為與現(xiàn)代瀏覽器(例如Chrome和Firefox)相同的DOM。 這是jsoup庫的一些有用的功能:
- Jsoup可以從URL,文件或字符串中抓取并解析HTML
- Jsoup可以使用DOM遍歷或CSS選擇器來查找和提取數(shù)據(jù)
- Jsoup允許您操縱HTML元素,屬性和文本
- Jsoup針對安全的白名單提供干凈的用戶提交的內(nèi)容,以防止XSS攻擊
- Jsoup還可以輸出整潔HTML
Jsoup旨在處理現(xiàn)實(shí)世界中發(fā)現(xiàn)的各種HTML,其中包括經(jīng)過正確驗(yàn)證HTML,以完成不驗(yàn)證標(biāo)簽的收集。 Jsoup的核心優(yōu)勢之一是它非常強(qiáng)大。
在此Java HTML解析教程中,我們將看到使用jsoup在Java中解析和遍歷HTML文檔的三個不同示例。 在第一個示例中,我們將解析一個HTML String ,其內(nèi)容均為標(biāo)記,以Java中的String文字形式出現(xiàn)。 在第二個示例中,我們將從網(wǎng)上下載HTML文檔,在第三個示例中,我們將加載我們自己的示例HTML文件login.html進(jìn)行解析。 此文件是一個示例HTML文檔,該文檔在包含HTML表單的正文部分中包含標(biāo)題標(biāo)簽和div。 它具有輸入標(biāo)簽來捕獲用戶名和密碼,并提供提交和重置按鈕以采取進(jìn)一步措施。 這是可以驗(yàn)證的正確HTML,即所有標(biāo)簽和屬性均已正確關(guān)閉。 這是我們的示例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進(jìn)行HTML解析非常簡單,只需調(diào)用靜態(tài)方法Jsoup.parse()并將HTML字符串傳遞給它即可。 JSoup提供了幾種重載的parse()方法,用于從String,文件,基本URI,URL和InputStream中讀取HTML文件。 您還可以指定字符編碼以正確讀取HTML文件(如果它們不是“ UTF-8”格式)。
parse(String html)方法將輸入HTML解析為新的Document。 在Jsoup中,Document擴(kuò)展Element擴(kuò)展Node。 同樣,TextNode擴(kuò)展了Node。 只要您傳遞非null字符串 ,就可以保證您使用包含(至少)head和body元素的Document進(jìn)行了成功,明智的解析。 擁有文檔后,您可以通過在Document及其父類Element和Node中調(diào)用適當(dāng)?shù)姆椒▉慝@取所需的數(shù)據(jù)。
這是我們完整的Java程序,用于解析HTML字符串,從Internet下載HTML文件和來自本地文件系統(tǒng)HTML文件。 為了運(yùn)行該程序,您可以使用Eclipse IDE,也可以僅使用任何IDE或命令提示符 。 在Eclipse中,這非常簡單,只需復(fù)制此代碼,創(chuàng)建一個新的Java項(xiàng)目,右鍵單擊src包并將其粘貼。 Eclipse將負(fù)責(zé)創(chuàng)建具有相同名稱的正確的程序包和Java源文件,因此絕對省事。 如果您已經(jīng)有一個Sample Java項(xiàng)目,那么這只是一步。 以下Java程序顯示了3個解析和遍歷HTML文件的示例。 在第一個示例中,我們直接解析帶有html內(nèi)容的String ,在第二個示例中,我們解析從URL下載HTML文件,在第三個示例中,我們從本地文件系統(tǒng)加載并解析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創(chuàng)建干凈的解析,而不管HTML的格式是否正確。 它可以處理以下錯誤:
未關(guān)閉的標(biāo)簽(例如<p> Java <p> Scala到<p> Java </ p> <p> Scala </ p>)
隱式標(biāo)簽(例如ega裸<td> Java很棒</ td>包裹在<table> <tr> <td>中) 可靠地創(chuàng)建文檔結(jié)構(gòu)(包含頭和主體以及頭中僅適當(dāng)元素的html)。
Jsoup是一個出色且強(qiáng)大的開源庫,它使讀取html文檔,正文片段,html字符串以及直接從Web上直接解析html內(nèi)容變得非常容易。
翻譯自: https://www.javacodegeeks.com/2014/09/3-examples-of-parsing-html-file-in-java-using-jsoup.html
java jsoup解析
總結(jié)
以上是生活随笔為你收集整理的java jsoup解析_3使用Jsoup解析Java中HTML文件的示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache Camel 3.2 – C
- 下一篇: neo4j 嵌入式_在嵌入式Neo4j中