溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析

發(fā)布時(shí)間:2020-12-08 15:33:07 來(lái)源:億速云 閱讀:192 作者:Leah 欄目:移動(dòng)開(kāi)發(fā)

Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

1.jsoup介紹

jsoup 是一款Java 的HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過(guò)DOM,CSS以及類(lèi)似于jQuery的操作方法來(lái)取出和操作數(shù)據(jù)。

2.使用場(chǎng)景

Android studio玩家可以不下載jar包,在Gradle里面加入

dependencies {
  compile 'org.jsoup:jsoup:1.9.2'
}

然后,找到你心儀的網(wǎng)頁(yè)去抓取數(shù)據(jù)

這里我們我繼續(xù)使用美食的網(wǎng)頁(yè),然后右鍵查看網(wǎng)頁(yè)源碼,或者按F12,接下來(lái)可以看到一大堆標(biāo)簽:

Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析

找到需要的,例如上圖這個(gè) “美食天下” ,可以看到 “美食天下” 是放在以 <div class="top-bar" id="J_top_bar"> 為節(jié)點(diǎn)的 <a title="美食天下" 中,要獲取這個(gè)“美食天下”,代碼可以這樣寫(xiě):

try {  
  //從一個(gè)URL加載一個(gè)Document對(duì)象。
  Document doc = Jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();
  //選擇“美食天下”所在節(jié)點(diǎn)
  Elements elements = doc.select("div.top-bar");  
  //打印 <a>標(biāo)簽里面的title
  Log.i("mytag",elements.select("a").attr("title"));
}catch(Exception e) {  
  Log.i("mytag", e.toString());
}

接下來(lái)看一下打印出來(lái)的結(jié)果:

Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析

Jsoup.connect(String url)方法從一個(gè)URL加載一個(gè)Document對(duì)象。如果從該URL獲取HTML時(shí)發(fā)生錯(cuò)誤,便會(huì)拋出 IOException,應(yīng)適當(dāng)處理。

一旦擁有了一個(gè)Document,你就可以使用Document中適當(dāng)?shù)姆椒ɑ蛩割?lèi) Element和Node中的方法來(lái)取得相關(guān)數(shù)據(jù)。

public class Element extends Node
public class Document extends Element

很多文章都是說(shuō)一大堆原理然后放出一個(gè)簡(jiǎn)單的例子,就跟我上面簡(jiǎn)單的打了一個(gè)log一樣,然后發(fā)現(xiàn)用起來(lái)的時(shí)候是沒(méi)那么簡(jiǎn)單的。為了大家能不看文檔也可以直接使用(并且看不懂那一大堆標(biāo)簽也可以用),我決定再舉一個(gè)例子(其實(shí)也就是比上面多打幾個(gè)log):

下圖紅色框框是我們要獲取的數(shù)據(jù),可以看到他們對(duì)應(yīng)的節(jié)點(diǎn)就是藍(lán)色圓圈里面的<div class="xxx">

Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析

廢話不多說(shuō)上代碼

try {  
  //還是一樣先從一個(gè)URL加載一個(gè)Document對(duì)象。
  Document doc = Jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();

  //“椒麻雞”和它對(duì)應(yīng)的圖片都在<div class="pic">中
  Elements titleAndPic = doc.select("div.pic");
  //使用Element.select(String selector)查找元素,使用Node.attr(String key)方法取得一個(gè)屬性的值
  Log.i("mytag", "title:" + titleAndPic.get(1).select("a").attr("title") + "pic:" + titleAndPic.get(1).select("a").select("img").attr("data-src"));

  //所需鏈接在<div class="detail">中的<a>標(biāo)簽里面
  Elements url = doc.select("div.detail").select("a");
  Log.i("mytag", "url:" + url.get(i).attr("href"));

  //原料在<p class="subcontent">中
  Elements burden = doc.select("p.subcontent");
  //對(duì)于一個(gè)元素中的文本,可以使用Element.text()方法
  Log.i("mytag", "burden:" + burden.get(1).text());

}catch(Exception e) {  
  Log.i("mytag", e.toString());
}

大功告成,接下來(lái)看看log

Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析

關(guān)于Android應(yīng)用中的html怎么利用jsoup進(jìn)行解析問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI