Jsoup使用

jsoup是一款Java的HTML解析器,主要用來對HTML解析.在爬蟲的時候,當咱們用HttpClient之類的框架,獲取到網頁源碼以後,須要從網頁源碼中取出咱們想要的內容,就能夠使用jsoup這類HTML解析器了,能夠很是輕鬆的實現.雖然jsoup也支持從某個地址直接去爬取網頁源碼,可是隻支持HTTP,HTTPS協議,支持不夠豐富.因此,主要仍是用來對HTML進行解析.其中,要被解析的HTML能夠是一個HTML的字符串,能夠是一個URL,能夠是一個文件.
一 快速入門
        1. 導入jar包
        2. 獲取Document對象
        3. 獲取對應的標籤Element對象
        4. 獲取數據css

[Java]  純文本查看 複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
//2.1獲取student.xml的path
     String path = JsoupDemo1. class .getClassLoader().getResource( "student.xml" ).getPath();
     //2.2解析xml文檔,加載文檔進內存,獲取dom樹--->Document
     Document document = Jsoup.parse( new File(path), "utf-8" );
     //3.獲取元素對象 Element
     Elements elements = document.getElementsByTag( "name" );
     System.out.println(elements.size());
     //3.1獲取第一個name的Element對象
     Element element = elements.get( 0 );
     //3.2獲取數據
     String name = element.text();
     System.out.println(name);


二 類的說明
        1. Jsoup:工具類,能夠解析html或xml文檔,返回Document
                * parse:解析html或xml文檔,返回Document
                * parse(File in, String charsetName):解析xml或html文件的。
                * parse(String html):解析xml或html字符串
                * parse(URL url, int timeoutMillis):經過網絡路徑獲取指定的html或xml的文檔對象
        2. Document:文檔對象。表明內存中的dom樹
                * 獲取Element對象
                * getElementById(String id):根據id屬性值獲取惟一的element對象
                * getElementsByTag(String tagName):根據標籤名稱獲取元素對象集合
                * getElementsByAttribute(String key):根據屬性名稱獲取元素對象集合
                * getElementsByAttributeValue(String key, String value):根據對應的屬性名和屬性值獲取元素對象集合
        3. Elements:元素Element對象的集合。能夠當作 ArrayList<Element>來使用
        4. Element:元素對象
                1. 獲取子元素對象
                        * getElementById(String id):根據id屬性值獲取惟一的element對象
                        * getElementsByTag(String tagName):根據標籤名稱獲取元素對象集合
                        * getElementsByAttribute(String key):根據屬性名稱獲取元素對象集合
                        * getElementsByAttributeValue(String key, String value):根據對應的屬性名和屬性值獲取元素對象集合
                2. 獲取屬性值
                        * String attr(String key):根據屬性名稱獲取屬性值
                3. 獲取文本內容
                        * String text():獲取文本內容
                        * String html():獲取標籤體的全部內容(包括字標籤的字符串內容)
        5. Node:節點對象
                * 是Document和Element的父類
三 快捷查詢方式
        1. selector:選擇器
                * 使用的方法:Elements        select?(String cssQuery)
                        * 語法:參考Selector類中定義的語法
        2. XPath:XPath即爲XML路徑語言,它是一種用來肯定XML(標準通用標記語言的子集)文檔中某部分位置的語言
                * 使用Jsoup的Xpath須要額外導入jar包。
                * 查詢w3cshool參考手冊,使用xpath的語法完成查詢html

[Java]  純文本查看 複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//1.獲取student.xml的path
             String path = JsoupDemo6. class .getClassLoader().getResource( "student.xml" ).getPath();
             //2.獲取Document對象
             Document document = Jsoup.parse( new File(path), "utf-8" );
 
             //3.根據document對象,建立JXDocument對象
             JXDocument jxDocument = new JXDocument(document);
 
             //4.結合xpath語法查詢
             //4.1查詢全部student標籤
             List<JXNode> jxNodes = jxDocument.selN( "//student" );
             for (JXNode jxNode : jxNodes) {
                 System.out.println(jxNode);
             }
 
             System.out.println( "--------------------" );
 
             //4.2查詢全部student標籤下的name標籤
             List<JXNode> jxNodes2 = jxDocument.selN( "//student/name" );
             for (JXNode jxNode : jxNodes2) {
                 System.out.println(jxNode);
             }
 
             System.out.println( "--------------------" );
 
             //4.3查詢student標籤下帶有id屬性的name標籤
             List<JXNode> jxNodes3 = jxDocument.selN( "//student/name[@id]" );
             for (JXNode jxNode : jxNodes3) {
                 System.out.println(jxNode);
             }
             System.out.println( "--------------------" );
             //4.4查詢student標籤下帶有id屬性的name標籤 而且id屬性值爲itcast
 
             List<JXNode> jxNodes4 = jxDocument.selN( "//student/name[@id='itcast']" );
             for (JXNode jxNode : jxNodes4) {
                 System.out.println(jxNode);
             }

 

 

更多免費技術資料可關注:annalin1203java

相關文章
相關標籤/搜索