程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中應用開源庫JSoup解析HTML文件實例

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

編輯:關於JAVA

Java中應用開源庫JSoup解析HTML文件實例。本站提示廣大學習愛好者:(Java中應用開源庫JSoup解析HTML文件實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中應用開源庫JSoup解析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中從谷歌主頁或許任何URL中下載並解析HTML文件的示例。

JSoup庫是甚麼

Jsoup是一個開源的Java庫,它可以用於處置現實運用中的HTML。它供給了異常方便的API來停止數據的提取及修正,充足應用了DOM,CSS和jquery作風辦法的優點。Jsoup完成了WAHTWG HTML5的標准,它從HTML解析出來的DOM和Chrome和Firefox如許的古代閱讀器解析出來的完整分歧。上面是Jsoup庫的一些有效的特征:

1.Jsoup可以從URL,文件,或許字符串中獲得並解析HTML。
2.Jsoup可以查找並提取數據,可使用DOM遍歷或許CSS選擇器。
3.你可使用Jsoup來修正HTML元素,屬性和文本。
4.Jsoup經由過程一個平安的白名單確保了用戶提交的內容是清潔的,以避免XSS進擊。
5.Jsoup還能輸入整潔的HTML。

Jsoup的設計初志是用於處置實際生涯中湧現的各類分歧的HTML,包含准確有用的HTML和不完全的有效的標簽聚集。Jsoup的一個焦點競爭力就是它的硬朗性。

在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://谷歌.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的更多的一些例子。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved