Jsoup解析HTML、加載文檔等實例

1、引入jsoup的jar包:http://jsoup.org/downloadhtml

  補充:http://jsoup.org/apidocs/   Jsoup API    能夠了解更詳細的內容node

2、Jsoup將html字符串解析成Document結構正則表達式

public void testJsoupHtml(){
        String html="<table><tr><td>名稱</td><td>價格(元/本)</td><td>描述</td></tr><tr><td>《霧都的孤兒》</td><td>33.4</td><td>敘述霧都的孤兒</td></tr></table>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc.childNodeSize());
    }

Jsoup.parse(String str)說明:該解析器可以盡最大可能從你提供的HTML文檔來創見一個乾淨的解析結果,不管HTML的格式是否完整。好比它能夠處理:api

  一、沒有關閉的標籤 (好比: <p>Lorem <p>Ipsum parses to <p>Lorem</p> <p>Ipsum</p>)
  二、隱式標籤 (好比. 它能夠自動將 <td>Table data</td>包裝成<table><tr><td>?)
  三、建立可靠的文檔結構(html標籤包含head 和 body,在head只出現恰當的元素)cookie

    補充說明:文檔的對象模型簡述:app

      一、文檔由多個Elements和TextNodes組成 (以及其它輔助nodes).
      二、其繼承結構以下:Document繼承Element繼承Node. TextNode繼承 Node.
      三、一個Element包含一個子節點集合,並擁有一個父Element。他們還提供了一個惟一的子元素過濾列表。post

3、Jsoup經過URL解析html文檔   得到Document對象  網站

  具體代碼以下:url

public void testJsoupUrl() throws IOException{
        String url="http://ntbedi04:11080/edi/task/allTask";
        Document doc=Jsoup.connect(url).get();
        String title=doc.title();
        System.out.println("文檔的名稱:"+title);
    }

  connect(String url)建立一個新的Collection對象,而後經過get()得到Document對象。spa

  connect()還有一些屬性能夠知足特殊的需求:

public void testJsoupUrlPost() throws IOException{
        String url="";
        Document doc = Jsoup.connect(url)
                  .data("query", "Java")   //post請求的參數
                  .userAgent("Mozilla")    //請求代理
                  .cookie("auth", "token")//cookie
                  .timeout(300000)   //請求時間的設置
                  .post();  
        System.out.println(doc.title());
    }

 

3、Jsoup解析本地文件html文件

public void testJsouploc() throws IOException{
        File htmlf=new File("C:/Users/Administrator/Desktop/choujiang.html");
        Document doc=Jsoup.parse(htmlf, "UTF-8");
        System.out.println(doc.title());
    }

對於相對路徑中的文件,能夠用parse(File in,String charsetName,String baseUrl)

  baseUri 參數用於解決文件中URLs是相對路徑的問題。若是不須要能夠傳入一個空的字符串。
  另外還有一個方法parse(File in, String charsetName) ,它使用文件的路徑作爲 baseUri。 這個方法適用於若是被解析文件位於網站的本地文件系統,且相關連接也指向該文件系統。

 

4、Jsoup中Document對象的操做

  Elements這個對象提供了一系列相似於DOM的方法來查找元素,抽取並處理其中的數據。具體以下:
 查找元素
  getElementById(String id)
  getElementsByTag(String tag)
  getElementsByClass(String className)
  getElementsByAttribute(String key) (and related methods)
  Element siblings: siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()
  Graph: parent(), children(), child(int index)

 元素數據
  attr(String key)獲取屬性attr(String key, String value)設置屬性
  attributes()獲取全部屬性
  id(), className() and classNames()
  text()獲取文本內容text(String value) 設置文本內容
  html()獲取元素內HTMLhtml(String value)設置元素內的HTML內容
  outerHtml()獲取元素外HTML內容
  data()獲取數據內容(例如:script和style標籤)
  tag() and tagName()

操做HTML和文本
  append(String html), prepend(String html)
  appendText(String text), prependText(String text)
  appendElement(String tagName), prependElement(String tagName)
  html(String value)

簡單實例:

public void testJsoupHtml(){
        String html="<table><tr><td>名稱</td><td>價格(元/本)</td><td>描述</td></tr><tr><td>《霧都的孤兒》</td><td>33.4</td><td>敘述霧都的孤兒</td></tr></table>";
        Document doc = Jsoup.parse(html);
        Elements tables=doc.getElementsByTag("table");
        Elements tdlist=tables.get(0).getElementsByTag("td");
    //輸出單元格中的內容
for (Element str : tdlist) { System.out.println(str.text()); } }

特別之處:得到某個值或對象

  可使用Element.select(String selector) 和 Elements.select(String selector) 方法實現:

Selector選擇器概述
tagname: 經過標籤查找元素,好比:a
ns|tag: 經過標籤在命名空間查找元素,好比:能夠用 fb|name 語法來查找 <fb:name> 元素
#id: 經過ID查找元素,好比:#logo
.class: 經過class名稱查找元素,好比:.masthead
[attribute]: 利用屬性查找元素,好比:[href]
[^attr]: 利用屬性名前綴來查找元素,好比:能夠用[^data-] 來查找帶有HTML5 Dataset屬性的元素
[attr=value]: 利用屬性值來查找元素,好比:[width=500]
[attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結尾或包含屬性值來查找元素,好比:[href*=/path/]
[attr~=regex]: 利用屬性值匹配正則表達式來查找元素,好比: img[src~=(?i)\.(png|jpe?g)]
*: 這個符號將匹配全部元素

Selector選擇器組合使用

el#id: 元素+ID,好比: div#logo
el.class: 元素+class,好比: div.masthead
el[attr]: 元素+class,好比: a[href]
任意組合,好比:a[href].highlight
ancestor child: 查找某個元素下子元素,好比:能夠用.body p 查找在"body"元素下的全部p元素
parent > child: 查找某個父元素下的直接子元素,好比:能夠用div.content > p 查找 p 元素,也能夠用body > * 查找body標籤下全部直接子元素
siblingA + siblingB: 查找在A元素以前第一個同級元素B,好比:div.head + div
siblingA ~ siblingX: 查找A元素以前的同級X元素,好比:h1 ~ p
el, el, el:多個選擇器組合,查找匹配任一選擇器的惟一元素,例如:div.masthead, div.logo

僞選擇器selectors

:lt(n): 查找哪些元素的同級索引值(它的位置在DOM樹中是相對於它的父節點)小於n,好比:td:lt(3) 表示小於三列的元素
:gt(n):查找哪些元素的同級索引值大於n,好比: div p:gt(2)表示哪些div中有包含2個以上的p元素
:eq(n): 查找哪些元素的同級索引值與n相等,好比:form input:eq(1)表示包含一個input標籤的Form元素
:has(seletor): 查找匹配選擇器包含元素的元素,好比:div:has(p)表示哪些div包含了p元素
:not(selector): 查找與選擇器不匹配的元素,好比: div:not(.logo) 表示不包含 class=logo 元素的全部 div 列表
:contains(text): 查找包含給定文本的元素,搜索不區分大不寫,好比: p:contains(jsoup)
:containsOwn(text): 查找直接包含給定文本的元素
:matches(regex): 查找哪些元素的文本匹配指定的正則表達式,好比:div:matches((?i)login)
:matchesOwn(regex): 查找自身包含文本匹配指定正則表達式的元素
相關文章
相關標籤/搜索