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): 查找自身包含文本匹配指定正則表達式的元素