Android 使用Jsoup解析HTML

时间:2022-02-09 08:18:42

前言

本文主要是讲jsoup爬取网页上的数据用法,具体介绍请看:

安装

as用户可直接依赖

implementation org.jsoup:jsoup:1.11.1

其他用户请看 https://jsoup.org/download

使用

下面的html来自干货*,就先以这个为例:

获取Document对象

Document对象可以看成一个一个HTML文档。

// 连接提供了一个方便的接口来从web获取内容,并将它们解析为文档
final Connection connect = Jsoup.connect("http://gank.io/xiandu/");
// 伪装成浏览器抓取,具体有没用布吉岛。。
connect.header("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0");
// 通过get()获取一个Document对象
final Document document = connect.get();

获取HTML head内容

Android 使用Jsoup解析HTML

我们想获取网页的标题,可以直接通过:

String title = document.head().select("title").text();
System.out.println(title);

输出:「读那些值得读的」

获取HTML body内容

前面的是不是感觉很简单,现在这个虽然复杂了一点,但是逻辑理清楚了,自然就简单很多了

<div class="typo">
<div class="container content">

<style>
<!-- 省略部分html --!>
</style>

<h3 class="center"> 闲读 </h3>
<p class="center" style="color: #747474;">
读那些值得读的
</p>

<div id="xiandu_cat">
<ul>
<li><a style="border: 1px solid #747474;" href="/xiandu">科技资讯</a></li>
<li><a href="/xiandu/apps">趣味软件/游戏</a></li>
<li><a href="/xiandu/imrich">装备党</a></li>
<li><a href="/xiandu/funny">草根新闻</a></li>
<li><a href="/xiandu/android">Android</a></li>
<li><a href="/xiandu/diediedie">创业新闻</a></li>
<li><a href="/xiandu/thinking">独立思想</a></li>
<li><a href="/xiandu/iOS">iOS</a></li>
<li><a href="/xiandu/teamblog">团队博客</a></li>
</ul>
<!-- 省略部分html --!>
</div>
<!-- 省略大部分html --!>
</div>
  • 获取三级标题
String title = document.body().select("div.typo").select("div.container").select("h3.center").text();
System.out.println(title);

输出: 闲读
  • 获取li标签中的值
// <div class="container content">两个类随便选一个就行,这应该是js知识。。
Elements typoElements = document.body().select("div.typo").select("div.container");
// 多个select()拼接可以用空格隔开
Elements catsLi = typoElements.select("div#xiandu_cat ul li");

遍历div标签,如果里面有class属性,可以用 "div.typo" 定位,如果是id属性,可以用"div#xiandu_cat",其实省略div标签名也可以,最好还是加上。

for (Element element : catsLi) {
String href = element.select("a").attr("href");
String text = element.text();
System.out.println(href + "\t" + text);
}

输出:/xiandu 科技资讯
/xiandu/apps 趣味软件/游戏
/xiandu/imrich 装备党
/xiandu/funny 草根新闻
/xiandu/android Android
/xiandu/diediedie 创业新闻
/xiandu/thinking 独立思想
/xiandu/iOS iOS
/xiandu/teamblog 团队博客
  • 获取内容
    Android 使用Jsoup解析HTML
Elements itemElements = typoElements.select("div.xiandu_items div.xiandu_item");
for (Element element : itemElements) {
Elements leftElements = element.select("div.xiandu_left");
// 编号,1:
String no = leftElements.select("span.xiandu_index").text();
// 跳转网址,http://daily.zhihu.com/story/9657300?utm_source=gank.io%2Fxiandu&utm_medium=website
String url = leftElements.select("a").attr("href");
// 内容,想精想怪 90——吃鸡手游化那些事
String desc = leftElements.select("a").text();
// 时间,8 分钟前
String date = leftElements.select("span small").text();

Elements rightElements = element.select("div.xiandu_right");
// 来源url,/xiandu/view/zhihu
String sourceUrl = rightElements.select("a.site-name").attr("href");
// 来源名称,知乎日报
String sourceTitle = rightElements.select("a.site-name").attr("title");
// 来源图标,http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
String sourceIcon = rightElements.select("a.site-name img").attr("src");
System.out.println(no + "\t" + url + "\t" + desc + " \t" + date + "\t" + sourceUrl + "\t" + sourceTitle + "\t" + sourceIcon);
}

输出:
1: http://daily.zhihu.com/story/9657300?utm_source=gank.io%2Fxiandu&utm_medium=website 想精想怪 90——吃鸡手游化那些事 15 分钟前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
2: http://daily.zhihu.com/story/9656949?utm_source=gank.io%2Fxiandu&utm_medium=website 去超市怎么选葡萄酒?就要 Freestyle~ 1 小时前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
3: http://daily.zhihu.com/story/9657035?utm_source=gank.io%2Fxiandu&utm_medium=website 公路自行车赛选手必须要佩戴头盔吗? 2 小时前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
4: http://www.ifanr.com/942151?utm_source=gank.io%2Fxiandu&utm_medium=website 除了性能超强的卡车和超跑,马斯克还发布了一款每个人都买得起的“特斯拉” 2 小时前 /xiandu/view/ifanr 爱范儿 http://ww3.sinaimg.cn/large/0066P23Wjw1f9rylijz6rj3030030gle.jpg
5: https://cn.engadget.com/2017/11/17/walmart-tesla-semi-test/?utm_source=gank.io%2Fxiandu&utm_medium=website 沃尔玛决定试一试 Tesla Semi 电动半挂卡车的水温 2 小时前 /xiandu/view/engadget Engadget 中文版 http://ww1.sinaimg.cn/large/0066P23Wjw1f9rym3y697j30300300sj.jpg
6: http://www.ifanr.com/942154?utm_source=gank.io%2Fxiandu&utm_medium=website 从红杉到腾讯:IPO 收割大户转换背后,互联网创投界发生了什么? 2 小时前 /xiandu/view/ifanr 爱范儿 http://ww3.sinaimg.cn/large/0066P23Wjw1f9rylijz6rj3030030gle.jpg
7: http://www.ifanr.com/942152?utm_source=gank.io%2Fxiandu&utm_medium=website 原因不明,苹果智能音箱 HomePod 延期上市 2 小时前 /xiandu/view/ifanr 爱范儿 http://ww3.sinaimg.cn/large/0066P23Wjw1f9rylijz6rj3030030gle.jpg
8: http://www.ifanr.com/942144?utm_source=gank.io%2Fxiandu&utm_medium=website 360 是卖什么的? 3 小时前 /xiandu/view/ifanr 爱范儿 http://ww3.sinaimg.cn/large/0066P23Wjw1f9rylijz6rj3030030gle.jpg
9: http://daily.zhihu.com/story/9656953?utm_source=gank.io%2Fxiandu&utm_medium=website 能否比较详细的介绍艺术家Maurizio Cattelan的艺术观念与作品? 3 小时前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
10: http://www.toodaylab.com/74784?utm_source=gank.io%2Fxiandu&utm_medium=website Hermès 为什么卖那么贵?掌握这 3 点,看懂奢侈品定价玄机 4 小时前 /xiandu/view/toodaylab 理想生活实验室 http://ww4.sinaimg.cn/large/610dc034gw1f9usojtqdfj21kw1kwn5e.jpg
11: http://daily.zhihu.com/story/9656556?utm_source=gank.io%2Fxiandu&utm_medium=website 为什么我们很少见到飞机爆胎? 5 小时前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
12: https://cn.engadget.com/2017/11/17/apple-delays-homepod-speaker-launch-to-early-2018/?utm_source=gank.io%2Fxiandu&utm_medium=website 苹果延后出货 HomePod 智能喇叭至2018年初 5 小时前 /xiandu/view/engadget Engadget 中文版 http://ww1.sinaimg.cn/large/0066P23Wjw1f9rym3y697j30300300sj.jpg
13: http://www.ifanr.com/941870?utm_source=gank.io%2Fxiandu&utm_medium=website 为什么情怀真的能当饭吃? 5 小时前 /xiandu/view/ifanr 爱范儿 http://ww3.sinaimg.cn/large/0066P23Wjw1f9rylijz6rj3030030gle.jpg
14: http://www.toodaylab.com/74783?utm_source=gank.io%2Fxiandu&utm_medium=website 今日消费资讯:《神奇动物在哪里 2》定名、赵丽颖成为浪琴全新优雅大使 5 小时前 /xiandu/view/toodaylab 理想生活实验室 http://ww4.sinaimg.cn/large/610dc034gw1f9usojtqdfj21kw1kwn5e.jpg
15: http://daily.zhihu.com/story/9656693?utm_source=gank.io%2Fxiandu&utm_medium=website 听不见的悲鸣:浅谈「熊孩子」 6 小时前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
16: http://daily.zhihu.com/story/9657243?utm_source=gank.io%2Fxiandu&utm_medium=website 威尼斯人如何看待城市正在下沉的现实? 7 小时前 /xiandu/view/zhihu 知乎日报 http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
17: http://www.ifanr.com/942026?utm_source=gank.io%2Fxiandu&utm_medium=website 在作死这件事上,你可能输给了微博 7 小时前 /xiandu/view/ifanr 爱范儿 http://ww3.sinaimg.cn/large/0066P23Wjw1f9rylijz6rj3030030gle.jpg
18: http://www.qdaily.com/articles/47339.html?source=feed&utm_source=gank.io%2Fxiandu&utm_medium=website Chanel 在日本的首家精品店重装开业,黑白色的 7 小时前 /xiandu/view/qdaily 好奇心日报 http://ww2.sinaimg.cn/large/610dc034gw1f9sg2pq9ufj202s02s0sj.jpg
19: http://www.qdaily.com/articles/47353.html?source=feed&utm_source=gank.io%2Fxiandu&utm_medium=website 牛津在中国推的阅读俱乐部,还是为了通过教英语卖书 7 小时前 /xiandu/view/qdaily 好奇心日报 http://ww2.sinaimg.cn/large/610dc034gw1f9sg2pq9ufj202s02s0sj.jpg
20: http://www.qdaily.com/articles/47342.html?source=feed&utm_source=gank.io%2Fxiandu&utm_medium=website 这些巧用天光的设计,可能会让你更愿意下厨房|这个设计了不起 7 小时前 /xiandu/view/qdaily 好奇心日报 http://ww2.sinaimg.cn/large/610dc034gw1f9sg2pq9ufj202s02s0sj.jpg

以上就是具体使用方法了,需要理解详细方法的去看官方API

全部代码

        final Connection connect = Jsoup.connect("http://gank.io/xiandu/");
// 伪装成浏览器抓取
connect.header("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0");
final Document document = connect.get();

// 获取标题
String title1 = document.head().select("title").text();
// 或者
String title2 = document.title();
System.out.println(title1);
System.out.println(title2);

Elements typoElements = document.body().select("div.typo").select("div.container");
// 多个select()拼接可以用空格隔开
Elements liElements = typoElements.select("div#xiandu_cat ul li");
for (Element element : liElements) {
String href = element.select("a").attr("href");
String text = element.text();
System.out.println(href + "\t" + text);
}

Elements itemElements = typoElements.select("div.xiandu_items div.xiandu_item");
for (Element element : itemElements) {
Elements leftElements = element.select("div.xiandu_left");
// 编号,1:
String no = leftElements.select("span.xiandu_index").text();
// 跳转网址,http://daily.zhihu.com/story/9657300?utm_source=gank.io%2Fxiandu&utm_medium=website
String url = leftElements.select("a").attr("href");
// 内容,想精想怪 90——吃鸡手游化那些事
String desc = leftElements.select("a").text();
// 时间,8 分钟前
String date = leftElements.select("span small").text();

Elements rightElements = element.select("div.xiandu_right");
// 来源url,/xiandu/view/zhihu
String sourceUrl = rightElements.select("a.site-name").attr("href");
// 来源名称,知乎日报
String sourceTitle = rightElements.select("a.site-name").attr("title");
// 来源图标,http://ww4.sinaimg.cn/large/610dc034jw1f9sfzr2gmnj204v04va9y.jpg
String sourceIcon = rightElements.select("a.site-name img").attr("src");
System.out.println(no + "\t" + url + "\t" + desc + " \t" + date + "\t" + sourceUrl + "\t" + sourceTitle + "\t" + sourceIcon);
}

在我的博客中查看更多简单实用文章