1. 程式人生 > >Jsoup解析Html(一)

Jsoup解析Html(一)

    現在網上流行了一種自由開發者的風氣;就是自己私下寫一個簡易的app上傳到github上;可以以此專案作為開源;同時熟悉git操作;但是很多時候我們都需要一些資料來呈現在app中;如圖片列表,如文字+圖片列表;網上有很多開放式的api可以呼叫,如百度api、http://gank.io/api(乾貨集中營api);如果你現在想弄自己的一套資料,想把一些網站的資料整合過來使用,那就需要去抓取某些網頁中的特定資料;

我們是通過Jsoup來抓取資料的;jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容;

關於Jsoup的jar包下載地址(以及Gradle、Maven中使用jsoup

的方式):

AndroidStudio中把jar包放入libs檔案下;右鍵add as a libr...後就可以使用了;廢話不多說,這裡就是講怎麼通過Jsoup去抓取網頁特定資料;

比如這裡我們需要抓取泡在網上的日子中安卓開發裡面文章的標題+圖片+詳情連結;


直接右鍵顯示網頁原始碼(或者F12);我們可以看到很多HTML+CSS標籤等;


我們直接在裡面快速找到我們需要的標題(如:Realm for Android快速入門教程、Android 6.0狀態列使用灰色文字和圖示);之後我們需要分析是從什麼節點開始才是一條資料;就好比陣列[{},{}]一樣;裡面每個資料都是以什麼開頭的;這裡我們分析之後可以看到是以<div class="archive-list-item">為節點就是一條資料;我們需要的詳情連線是在<div class="archive-list-item">層下第一個標籤<a href>中;圖片地址是在第二個標籤<img>中, 我們需要的標題是在<div class="post-intro">層下的子標籤裡面;

      我們所需要的東西已經找到;接下來我們去抓取出資料封裝一下就可以用了;

程式碼如下:


可以看到先是通過Jsoup.connect(url).get();獲取一個Document;這樣我們就可以通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料;首先解析我們上面說的節點<div class="archive-list-item">會得到一個Elements 通過for迴圈;我們在迴圈中取我們需要的資料;看程式碼可以發現Elements的兩個屬性select和attr;select可以認為是提取<XXX這種標籤;attr可以是認為提取XXX的內容;如:e.select("img").attr("src")) 就是提取標籤img下面的src對應的內容;我們執行列印一下資料可以看到下面的結果:


注意點:

我們獲取到的Document 是導那個型別的包  Element也要一樣

importorg.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

可以看到我們需要的資料已經打印出來了;

接著我們就是接收跟封裝資料了,畢竟我們習慣了後臺伺服器返回的那種json資料;接下來寫一個簡易的Bean類如下:


裡面序列化的程式碼沒截全;把上面程式碼改下改掉;順便加上分頁功能:


這樣我們就能愉快地使用List<Object>資料了;