当前位置: 移动技术网 > IT编程>移动开发>Android > 手把手教学Android用jsoup解析html实例

手把手教学Android用jsoup解析html实例

2019年07月24日  | 移动技术网IT编程  | 我要评论

免费发布黄石信息,5s和5的区别,夺宝幸运星全集下载

1.jsoup介绍

很多时候,我们需要从各种网页上面抓取数据,而jsoup 是一款java 的html解析器,可直接解析某个url地址、html文本内容。它提供了一套非常省力的api,可通过dom,css以及类似于jquery的操作方法来取出和操作数据。

jsoup官方文档:

2.使用场景

下面是一张关于美食的截图,可以留意到这是一个html网页,当我们想要抓取里面的数据的时候,jsoup就能帮到我们很多。


接下来开始手把手教学

首先,也是很重要的一步,就是下载jar包,丢到libs里面

jar包下载地址:

android studio玩家可以不下载jar包,在gradle里面加入

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

然后,找到你心仪的网页去抓取数据

这里我们我继续使用美食的网页,然后右键查看网页源码,或者按f12,接下来可以看到一大堆标签:

找到需要的,例如上图这个 “美食天下” ,可以看到 “美食天下” 是放在以 <div class="top-bar" id="j_top_bar"> 为节点的 <a title="美食天下" 中,要获取这个“美食天下”,代码可以这样写:

try {  
  //从一个url加载一个document对象。
  document doc = jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();
  //选择“美食天下”所在节点
  elements elements = doc.select("div.top-bar");  
  //打印 <a>标签里面的title
  log.i("mytag",elements.select("a").attr("title"));
}catch(exception e) {  
  log.i("mytag", e.tostring());
}

接下来看一下打印出来的结果:


jsoup.connect(string url)方法从一个url加载一个document对象。如果从该url获取html时发生错误,便会抛出 ioexception,应适当处理。

一旦拥有了一个document,你就可以使用document中适当的方法或它父类 element和node中的方法来取得相关数据。

public class element extends node
public class document extends element

很多文章都是说一大堆原理然后放出一个简单的例子,就跟我上面简单的打了一个log一样,然后发现用起来的时候是没那么简单的。为了大家能不看文档也可以直接使用(并且看不懂那一大堆标签也可以用),我决定再举一个例子(其实也就是比上面多打几个log):

下图红色框框是我们要获取的数据,可以看到他们对应的节点就是蓝色圆圈里面的<div class="xxx">

废话不多说上代码

try {  
  //还是一样先从一个url加载一个document对象。
  document doc = jsoup.connect("http://home.meishichina.com/show-top-type-recipe.html").get();

  //“椒麻鸡”和它对应的图片都在<div class="pic">中
  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"));

  //所需链接在<div class="detail">中的<a>标签里面
  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");
  //对于一个元素中的文本,可以使用element.text()方法
  log.i("mytag", "burden:" + burden.get(1).text());

}catch(exception e) {  
  log.i("mytag", e.tostring());
}

大功告成,接下来看看log


没有问题!那么教学可以结束了!

注意:

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()方法把数据抽出来

6.没有6了就是这么简单!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网