时间:2021-05-19
1.jsoup介绍
很多时候,我们需要从各种网页上面抓取数据,而jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
jsoup官方文档:https://jsoup.org/cookbook/
2.使用场景
下面是一张关于美食的截图,可以留意到这是一个html网页,当我们想要抓取里面的数据的时候,jsoup就能帮到我们很多。
接下来开始手把手教学
首先,也是很重要的一步,就是下载jar包,丢到libs里面
jar包下载地址:http://jsoup.org/download
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 Nodepublic 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了就是这么简单!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android利用jsoup解析HTML页面的方法。分享给大家供大家参考,具体如下:这节主要是讲解jsoup解析HTML页面。由于在android
手把手教你用C#开发Android应用程序的方法和流程摘要:用C#能开发RFID-android吗?C#真的能开发android程序吗?C#开发android程
手把手教你如何锁定三维视图的方向,方法快捷,好用,是你学习BIM的必须知道的事情!手把手教你如何锁定三维视图的方向软件名称:Autodeskrevit2017中
手把手教你win7系统怎么共享文件夹很多人都知道文件可以共享,但是很多网友也提出了,win7系统怎么共享文件夹呢?那么,下面,电脑达人将手把手教你win7系统怎
北京时间6月11日,谷歌正式推送Android11beta版更新,用户可以通过加入测试版计划获取更新。接下来小编会手把手教大家如何尝鲜Android11。申请测