手把手教学 Android用jsoup解析html

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 1.jsoup介绍,文档http://www.open-open.com/jsoup/很多时候,我们需要从各种网页上面抓取数据,而jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。
1.jsoup介绍,文档http://www.open-open.com/jsoup/

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

jsoup官方文档
https://jsoup.org/cookbook/
中文文档
http://www.open-open.com/jsoup/

2.使用场景

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


Paste_Image.png


接下来开始手把手教学
  • 首先,也是很重要的一步,就是下载jar包,丢到libs里面

    jar包下载地址
    http://jsoup.org/download

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

    dependencies {
        compile 'org.jsoup:jsoup:1.9.2'
    }
  • 然后,找到你心仪的网页去抓取数据

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


Paste_Image.png

找到需要的,例如上图这个 “美食天下” ,可以看到 “美食天下” 是放在以 <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());
}

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


Paste_Image.png

Jsoup.connect(String url)方法从一个URL加载一个Document对象。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。
一旦拥有了一个Document,你就可以使用Document中适当的方法或它父类 ElementNode中的方法来取得相关数据。

public class Element extends Node
public class Document extends Element

很多文章都是说一大堆原理然后放出一个简单的例子,就跟我上面简单的打了一个log一样,然后发现用起来的时候是没那么简单的。为了大家能不看文档也可以直接使用(并且看不懂那一大堆标签也可以用),我决定再举一个例子(其实也就是比上面多打几个log):
下图红色框框是我们要获取的数据,可以看到他们对应的节点就是蓝色圆圈里面的<div class="xxx">


Paste_Image.png


废话不多说上代码

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


Paste_Image.png

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

注意:

Jsoup.connect(String url)方法不能运行在主线程,否则会报NetworkOnMainThreadException


最后上一张应用在项目的效果图:


Paste_Image.png

有没有发现熟悉的椒麻鸡?很酷炫有木有!


目录
相关文章
|
2月前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
164 2
|
22天前
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,
|
21天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
100 1
|
27天前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`&lt;p&gt;`、`&lt;body&gt;`和`&lt;html&gt;`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。
|
1月前
|
XML 前端开发 数据格式
Beautiful Soup 解析html | python小知识
在数据驱动的时代,网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据,进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库,可以帮助我们轻松地解析和提取网页中的数据。本文将详细介绍 Beautiful Soup 的基础知识和常用操作,帮助初学者快速入门和精通这一强大的工具。【10月更文挑战第11天】
60 2
|
1月前
|
数据采集 XML 前端开发
Jsoup在Java中:解析京东网站数据
Jsoup在Java中:解析京东网站数据
|
1月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
44 6
|
1月前
|
前端开发 JavaScript
pyquery:一个灵活方便的 HTML 解析库
pyquery:一个灵活方便的 HTML 解析库
23 1
|
2月前
|
存储 开发框架 数据可视化
深入解析Android应用开发中的四大核心组件
本文将探讨Android开发中的四大核心组件——Activity、Service、BroadcastReceiver和ContentProvider。我们将深入了解每个组件的定义、作用、使用方法及它们之间的交互方式,以帮助开发者更好地理解和应用这些组件,提升Android应用开发的能力和效率。
186 5
|
2月前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
90 8

热门文章

最新文章

推荐镜像

更多