介紹
- Jsoup是一個用來處理html文本的java庫。它提供了非常友善的API,可以通過dom,css或者類似jquery的方法來提取和操作資料。 嗯,是以他到底是幹嘛的呢? 當我們通路一個網站拿到它的html代碼的時候,往往我們所需要的一些資料就已經包含在html裡,Jsoup就是幫我們把這些我們想要的資料提取出來。還是不夠清晰明了?沒關系,我們一起來看一個demo。
demo
- 以解析本人首頁為例 https://www.jianshu.com/u/413ca7e5e66c ,首先是拿到首頁的html頁面,并字元串的格式傳回,這裡使用okhttp架構,各位看官老爺也可以使用其他架構,隻要能拿到html頁面即可。
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(URL).build();
try {
Response response=okHttpClient.newCall(request).execute();
String htmlData=response.body().string();
resolve(htmlData);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
-
傳回的html字元串如下
傳回的html
-
然後利用Jsoup對得到的字元串進行解析,傳回浏覽器,按下F12,我們可以看到頁面的html代碼,找到對應的文章子產品的html,在某個div下的id為list-container的ul、li清單:
文章子產品的html
-
單看每一個li,可以看出文章的具體内容,這裡隻解析文章的标題,它在li裡的class為title的a标簽裡:
需要解析的标題的位置
- 根據Jsoup對得到的html進行解析:、
private void resolve(String htmlData) {
Document document = Jsoup.parse(htmlData);
Elements elements = document.select("div#list-container ul li");
List<BlogModel> list=new ArrayList<>();
for(Element element:elements){
BlogModel blogModel = new BlogModel();
blogModel.setTitle(element.select("a.title").first().text());
list.add(blogModel);
}
for(BlogModel blogModel:list){
Log.e("info",blogModel.getTitle());
}
}
-
下面是得到的資料日志:
解析結果
-附
jsoup 下載下傳位址。