Android爬虫之Jsoup

最近做了个获取Kindle特价书的app(https://www.coolapk.com/apk/167660),
使用了jsoup来解析亚马逊的html代码,觉得很强大,遂分享一下。

如图:

效果

1、Jsoup

介绍

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

地址

Jsoup 官网:https://jsoup.org/

Jsoup 中文文档:http://www.open-open.com/jsoup/

导入

Eclipse 可以下载jar: https://jsoup.org/download

Android studio可以在Gradle中添加:

compile 'org.jsoup:jsoup:1.11.2'

简单使用

从一个Url中加载Document:

Document doc = Jsoup.connect("http://baidu.com/").get();

获取id为next的a标签:

Element next = doc.getElementById("next");

获取该a标签的href属性:

String nextUrl = next.attr("href");

具体使用方法可以看使用文档: http://www.open-open.com/jsoup/

2、上手

我们以亚马逊Kindle每周特价书为例,地址: https://www.amazon.cn/s/ref=sr_pg_1?rh=n%3A1852543071&sort=popularity-rank&ie=UTF8&qid=1511322011

在浏览器中打开网页(以chrome为例),可以看到如图:

每周特价书页面

按F12查看源码,然后按Ctrl+shift+C,然后点击图书的区域,通过查找,我们可以看到如下的源码:

网页源码

可以看出来,id为 “s-results-list-atf” 的ul标签,便是商品列表,class为s-result-item的li标签,便是列表item。

那么,我们可以写代码,用户获取所有商品的标签:

    Connection con = Jsoup.connect(url);
// UserAgent是发送给服务器的当前浏览器的信息。
// 这是我的电脑的chrome的userAgent。
con.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
// 获取所有的class 为 "s-result-item"的li标签。
Elements elements = document.getElementsByClass("s-result-item");
for (Element li : elements) {
   ...
}

我们展开每个item的li标签,继续查找,可以看到图片的信息:

商品图片

则,我们可以写:

 Element img = li.select("img[alt=产品详细信息]").first();
 // 图片地址
 String imgUrl = img.attr("src");

商品标题和链接:

商品标题
// 标题、链接
                    Element aTtile = li.select("a.s-access-detail-page").first();
                    String title = aTtile.attr("title");
                    String bookUrl = aTtile.attr("href");

以此类推,我们可以将本页面的图书图片、标题、链接、作者、评分、评分数量等信息,全部爬出来。同时,不要忘了,我们还要找到下一页的链接:

// 下一页
            Element aNextPage = document.getElementById("pagnNextLink");
            if (aNextPage == null) {
                mNextPageUrl = null;
            } else {
                mNextPageUrl = "https://www.amazon.cn" + aNextPage.attr("href");
            }

这样,我们在上拉加载的时候,就可以通过mNextPageUrl是否为Null,来判断是否还有下一页。

3、其他问题

这篇文章里,我演示的是电脑端网页,而我在app中用的是手机端网页,因为同样的链接,手机端网页比电脑端网页少100kb左右流量(不计算图片)。如果大家要在项目中使用,尽量使用手机端网页比较好一点。
那么,怎么让获取的网页为手机端的呢?
我们修改UserAgent为手机浏览器:

connection.userAgent(String userAgent);

比如我的小米Max2的Via浏览器的UserAgent为:

User-Agent,Mozilla/5.0 (Linux; Android 7.1.1; MI MAX 2 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36

记住,大多数网站的手机端和电脑端的Jsoup分析规则,是不一样的,大家要做区别。

4、总结

记得原来在学校学java的时候,写过一个百度搜索的小软件,可以获取百度搜索出来的结果的前十项,那时候还是用正则来一点一点匹配的。

而现在我们可以用Jsoup简单地实现这些功能,而且Jsoup最大的好处在于 可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据,如果你对前端稍微懂点的话,操作起来基本没有什么学习成本的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容