轉自:http://www.reibang.com/p/a620a2664f58
1.jsoup介紹
很多時候现恼,我們需要從各種網頁上面抓取數(shù)據凭豪,而jsoup是一款Java 的HTML解析器耙箍,可直接解析某個URL地址沛厨、HTML文本內容。它提供了一套非常省力的API用爪,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據分冈。
jsoup官方文檔:
中文文檔:
http://www.open-open.com/jsoup/
2.使用場景
在遇到部分 不完整的還html代碼的時候圾另,因為用Html.fromHtml()函數(shù)衣撬,從這個函數(shù)就可以知道這個是將一段html內容解析成TextView可以展示的內容滞乙,但是 想圖片處理或者其他內容菱魔,并不能顯示完整幅慌,于是可以 用jsoup進行html解析
3.下載jar包
jar包下載地址:http://jsoup.org/download
4.這里我們我繼續(xù)使用美食的網頁,然后右鍵查看網頁源碼拓巧,或者按F12椰苟,接下來可以看到一大堆標簽磁餐、
找到需要的肠牲,例如上圖這個“美食天下”幼衰,可以看到“美食天下”是放在以
try {
//從一個URL加載一個Document對象缀雳。
Document doc = Jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();
//選擇“美食天下”所在節(jié)點
Elements elements = doc.select("div.top-bar");
//打印 標簽里面的title
Log.i("mytag",elements.select("a").attr("title"));
}catch(Exception e) {
Log.i("mytag", e.toString());
}
接下來看一下打印出來的結果:
Paste_Image.png
Jsoup.connect(String url)方法從一個URL加載一個Document對象。如果從該URL獲取HTML時發(fā)生錯誤梢睛,便會拋出 IOException肥印,應適當處理。
一旦擁有了一個Document绝葡,你就可以使用Document中適當?shù)姆椒ɑ蛩割?b>Element和Node中的方法來取得相關數(shù)據深碱。
public class Element extends Node
public class Document extends Element
很多文章都是說一大堆原理然后放出一個簡單的例子,就跟我上面簡單的打了一個log一樣藏畅,然后發(fā)現(xiàn)用起來的時候是沒那么簡單的敷硅。為了大家能不看文檔也可以直接使用(并且看不懂那一大堆標簽也可以用),我決定再舉一個例子(其實也就是比上面多打幾個log):
下圖紅色框框是我們要獲取的數(shù)據愉阎,可以看到他們對應的節(jié)點就是藍色圓圈里面的
Paste_Image.png
廢話不多說上代碼
try {
//還是一樣先從一個URL加載一個Document對象绞蹦。
Document doc = Jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();
//“椒麻雞”和它對應的圖片都在
Elements titleAndPic = doc.select("div.pic");
//使用Element.select(String selector)查找元素,使用Node.attr(String key)方法取得一個屬性的值
Log.i("mytag", "title:" + titleAndPic.get(1).select("a").attr("title") + "pic:" + titleAndPic.get(1).select("a").select("img").attr("data-src"));
//所需鏈接在
Elements url = doc.select("div.detail").select("a");
Log.i("mytag", "url:" + url.get(i).attr("href"));
//原料在
中
Elements burden = doc.select("p.subcontent");
//對于一個元素中的文本榜旦,可以使用Element.text()方法
Log.i("mytag", "burden:" + burden.get(1).text());
}catch(Exception e) {
Log.i("mytag", e.toString());
}
大功告成幽七,接下來看看log
Paste_Image.png
沒有問題!那么教學可以結束了溅呢!
注意:
Jsoup.connect(String url)方法不能運行在主線程澡屡,否則會報NetworkOnMainThreadException
1.下載jar包并丟到libs(或者在gradle)
2.找到心儀的網頁
3.用Jsoup.connect()獲取網頁的document
4.查看網頁源碼,對準你想要的地方咐旧,給他來一個Element.select(String selector)
5.用Node.attr(String key)或者Element.text()方法把數(shù)據抽出來