Java中使用開源庫JSoup解析HTML文件實例

這篇文章主要介紹了Java中使用開源庫JSoup解析HTML文件實例,Jsoup是一個開源的Java庫,它能夠用於處理實際應用中的HTML,好比常見的HTML格式化就能夠用它來實現,須要的朋友能夠參考下

HTML是WEB的核心,互聯網中你看到的全部頁面都是HTML,無論它們是由JavaScript,JSP,PHP,ASP或者是別的什麼WEB技術動態生成的。你的瀏覽器會去解析HTML並替你去渲染它們。不過若是你須要本身在Java程序中解析HTML文檔並查找某些元素,標籤,屬性或者檢查某個特定的元素是否存在的話,那又該如何呢?若是你已經使用Java編程多年了,我相信你確定試過去解析XML,也使用過相似DOM或者SAX這樣的解析器,不過頗有可能你從未進行過任何的HTML解析的工做。更諷刺的是,在Java應用中,不多會有須要你去解析HTML文檔的時候,這裏並不包括Servlet或者其它的Java WEB技術。更糟糕的是,JDK核內心也沒有包括HTTP或者HTML的庫,至少我並不知道有這個。這就是爲何一碰上解析HTML文件時,許多Java程序員就得先Google一下 ,看看如何在Java中取出一個HTML的標籤。當我有這個須要的時候,我相信確定會有一些開源庫能實現這個,不過我沒有想到居然有JSoup這麼酷的而且功能齊全的庫。它不只能支持讀取並解析HTML文檔,並且還能讓你從HTML文件抽取出任何的元素,以及它們的屬性,它們的CSS屬性,你還能進它們進行修改。有了JSoup你簡直能夠對HTML文檔作任何事情。咱們將會看到如何在Java中從google主頁或者任何URL中下載並解析HTML文件的示例。css

JSoup庫是什麼html

Jsoup是一個開源的Java庫,它能夠用於處理實際應用中的HTML。它提供了很是便利的API來進行數據的提取及修改,充分利用了DOM,CSS以及jquery風格方法的長處。Jsoup實現了WAHTWG HTML5的規範,它從HTML解析出來的DOM和Chrome以及Firefox這樣的現代瀏覽器解析出來的徹底一致。下面是Jsoup庫的一些有用的特性:java

1.Jsoup能夠從URL,文件,或者字符串中獲取並解析HTML。
2.Jsoup能夠查找並提取數據,可使用DOM遍歷或者CSS選擇器。
3.你可使用Jsoup來修改HTML元素,屬性以及文本。
4.Jsoup經過一個安全的白名單確保了用戶提交的內容是乾淨的,以防止XSS攻擊。
5.Jsoup還能輸出整潔的HTML。node

Jsoup的設計初衷是用於處理現實生活中出現的各類不一樣的HTML,包括正確有效的HTML以及不完整的無效的標籤集合。Jsoup的一個核心競爭力就是它的健壯性。jquery

在Java中使用Jsoup進行HTML解析程序員

在這篇Java HTML解析的教程中,咱們會看到在Java中使用Jsoup解析及遍歷HTML的三個不一樣的示例。第一個例子中,咱們會解析一個HTML字符串,它的內容就是Java中的字符串字面量組成的標籤。第二個例子中,咱們會從WEB中下載HTML文檔,而第三個例子中,咱們會加載一個HTML示例文件login.html來進行解析。這個文件是一個HTML文檔的示例,它包含title標籤,body裏面有一個div標籤,裏面包含一個表單。它擁有input標籤來用於獲取用戶名及密碼,同時還有提交及重置的按鈕用來進行下一步操做。它是一個正確有效的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編碼的話,你還能夠指定字符編碼,這樣能夠正確地讀取HTML文件。下面是Jsoup庫中HTML解析方法的一個完整的列表。parse(String html)方法將輸入的HTML解析成一個新的Document。在Jsoup裏,Document繼承了Element,而它又繼承自Node。一樣的TextNode也繼承自Node。只要你傳入的是一個不爲null的字符串,你就確定能獲取到一個成功的有意義的解析,獲得一個包含head和body元素的Document。一旦你拿到這個Document,你就能夠調用Document以及它的父類Element和Node上面的適當的方法來獲取到你想要的數據了。瀏覽器

解析HTML文檔的Java程序安全

下面是一個解析HTML字符串,網絡上下載的HTML文件,以及本地文件系統中的HTML文件的完整的Java程序。你可使用Eclipse IDE或者別的IDE甚至命令來運行這個程序。在Eclipse裏面則很簡單,拷貝這份代碼,新建一個Java工程,在src包上右鍵並粘貼進去就能夠了。Eclipse會去建立正確的包及同名的Java源文件的,所以工做量最小。若是你已經有一個Java示例工程了,那麼僅需一步就能夠了。下面的這個Java程序展現瞭解析及遍歷HTML文件的三個不一樣例子。第一個例子中,咱們直接解析了一個內容爲HTML的字符串,第二個例子中咱們解析了一個從URL中下載的HTML文件,第三個中咱們從本地文件系統中加載了一個HTML文檔並進行解析。第一和第三個例子中都用到了parse方法來獲取一個Document對象,你能夠查詢它來提取出任何的標籤值或者屬性值。第二個例子中,咱們用到了Jsoup.connect方法,它會去建立URL的鏈接,下載HTML並進行解析。這個方法也會返回Document,它能夠用於後續的查詢及獲取標籤或者屬性的值。網絡

 

複製代碼代碼以下:

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>"  
                + "|[b]HelloWorld[/b]"  
                + ""  
                + "</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的好處就是它的健壯性很強。Jsoup HTML解析器會對你提供的HTML進行儘可能乾淨的解析,而不去考慮這個HTML是不是格式良好的。它能夠處理以下這些錯誤:未閉合的標籤(好比,Java <p>Scala to <p>JavaScala),隱式標籤(好比,一個裸的|Java is Great被封裝到了|裏面),它總能建立出一個文檔結構(包含head及body的HTML,而且head裏只會包含正確的元素)。這就是在Java中如何進行HTML的解析。Jsoup是一個優秀的健壯的開源庫,它使得讀取HTML文檔,body片斷,HTML字符串,以及直接從WEB中解析HTML內容都變得至關簡單。在這篇文章中,咱們學習瞭如何在Java中獲取一個特定的HTML標籤,正如第一個例子中咱們將title及H1標籤的值提取成了文本,而第三個例子中咱們學習到了如何經過提取CSS屬性來從HTML標籤中獲取屬性值。除了強大的jQuery風格的html.body().getElementsByTag("h1").text()方法,你還能夠提取任意的HTML標籤,它還提供了像Document.title()和Element.className()這樣便捷的方法,你能夠快速獲取到標題及CSS類。但願JSoup能讓你玩得愉快,很快咱們將會看到關於這個API的更多的一些例子。

如對本文有疑問,請提交到交流社區,廣大熱心網友會爲你解答!! 點擊進入社區

轉載自:http://www.jb51.net/article/55620.htm

相關文章
相關標籤/搜索