HTML抽取工具Jsoup


Jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作數據。當前版本為1.7.1。

 

jsoup的主要功能如下:

1. 從一個URL,文件或字符串中解析HTML;

2. 使用DOM或CSS選擇器來查找、取出數據;

3. 可操作HTML元素、屬性、文本;

Jsoup官方網站:http://jsoup.org/.可以通過其給出的學習資料http://jsoup.org/cookbook/和它的API進行學習http://jsoup.org/apidocs/.

經過翻譯的中文資料不妨參考http://www.open-open.com/jsoup/,這些都是學習Jsoup的好材料。

圖所示是Jsoup包結構,Jsoup首先將一個Html文檔或者Html片段解析成DOM結構,Html上的每一個元素都對應於DOM中的一個節點node。因此,可通過 DOM,CSS 以及類似於 jQuery 的操作方法來取出和操作數據。

例如,以下是一個Jsoup抽取Web頁面的例子:

 1 import java.net.URL;
 2 
 3 import org.jsoup.Jsoup;
 4 import org.jsoup.nodes.Document;
 5 import org.jsoup.nodes.Element;
 6 import org.jsoup.select.Elements;
 7 
 8 public class JsoupTest 
 9 {
10 
11     public static void main(String[] args) throws Exception
12     {
13         URL url = new URL("http://www.guet.edu.cn"); //連接一個頁面
14         Document doc = Jsoup.parse(url, 3 * 1000);   //解析獲取Document對象
15 
16         Elements test = doc.select("a"); //獲取頁面上所有的a元素
17         for (Element element : test) 
18         {
19             //element.outerHtml() 和  element.toString()效果一樣
20             System.out.println("鏈接源代碼:" + element.outerHtml());
21             System.out.println("鏈接地址:" + element.attr("href") + "  鏈接文本:"
22                     + element.text()+" next sbl:"+element.nextSibling().nodeName());
23             ;
24         }
25 
26     }
27 }


至於如何獲取一個HTML文檔的頁面所有文本內容,不妨使用上面的例子作如下修改:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;


public class LoadDocument
{

    public static void main(String[] args) throws Exception
    {
        Document doc = Jsoup.connect("http://Jsoup.org").get(); 
        String title = doc.title();
        
        System.out.println("文檔的Html內容:");
        System.out.println(doc.html());
        
        System.out.println("文本內容為:");
        System.out.println(doc.text());
    }
}

結果如下圖:

 

通過Jsoup,可以較為方便的抽取頁面上的內容,更為方便的是《Use selector-syntax to find elements》可以制定抽取規則,抽取頁面上的目標信息節點。

例如:

 1 import java.io.File;
 2 import java.io.IOException;
 3 
 4 import org.jsoup.Jsoup;
 5 import org.jsoup.nodes.Document;
 6 import org.jsoup.nodes.Element;
 7 import org.jsoup.select.Elements;
 8 
 9 
10 public class Use_selector_syntax_find_elements {
11 
12 
13     public static void main(String[] args) throws IOException
14     {
15         //File input = new File("http://www.hao123.com//index.html");
16         Document doc = Jsoup.connect("http://www.hao123.com/index.htm").get();
17         //Document doc = Jsoup.parse(input, "gb2312","");
18         
19         System.out.println("-----------------------------------------------");
20         System.out.println(doc);
21         System.out.println("-----------------------------------------------");
22         paser(doc);
23     }
24     
25     public static void paser(Document doc)
26     {
27         Elements links = doc.select("a[href]"); // a with href 
28         Elements pngs = doc.select("img[src$=.png]");  // img with src ending .png 
29         Element masthead = doc.select("div.masthead").first();   // div with class=masthead 
30         Elements resultLinks = doc.select("h3.r > a"); // direct a after h3
31         
32         System.err.print(links);
33         System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++");
34         
35     }
36 }


Jsoup功能同HtmlParser,但卻比Htmlparser更為方便,API更加簡潔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM