Android开发一大神器
2015-05-15盛雪丰
盛雪丰
摘要:Jsoup 是Android应用开发中著名的第三方类库,其主要应用于操作html文件,获取用户需要的数据。该技术主要通过获取URL 地址、HTML 格式的文本内容进行解析 。同时它还提供了一套非常完善的API接口规范,让开发人员只需在程序中调用相应的接口即可。尤其是Jsoup功能强大的选择器,能够让用户方便的通过访问节点名称或者HTML元素中的id即可轻松获取数据。正因为它所具有的这些优势让它在轻量级的应用中,省去了操作数据库的麻烦。该文主要通过讲解Jsoup在android应用开发中所占的优势,以及如何解析百度新闻网为契机,进而介绍Jsoup的使用方法。
关键词:Android轻应用;Jsoup
中图分类号:TN927 文献标识码:A 文章编号:1009-3044(2015)08-0063-03
随着社会的发展与进步,信息量呈现出爆炸式的增长速度。与此同时,伴随着智能手机的日益普及,手机在人们的日常生活中逐渐扮演着越来越重要的角色。另外,近年来随着我国4G网络的全面覆盖,也使得手机在移动互联网上的应用也越来越丰富,网上看视频、刷微博、聊微信等几乎成了手机族的最爱。越来越多的开发者也开始从事互联网信息交互技术的研究,范围涵盖了移动通信、信息交互、电子商务等方面。目前,国内最常见的移动开发平台主要有Android,IPhone以及Windows Phone,大部分的在校大学生所使用的智能手机主要是以Android系統为代表。而本文所介绍的Jsoup技术正是基于Android平台下,在文中将通过介绍Jsoup技术来实现百度新闻网数据的抓取。
1 Jsoup简介
Jsoup是Android应用开发中著名的第三方类库,其主要应用于解析html文件,获取用户需要的数据。它提供了一套非常完善的API接口规范,开发者可以通过DOM遍历或者类似于jQuery的操作方法来取出和操作数据。同时它还包含了一个支持最新 HTML5技术的解析器分支,能够很好的降低解析的时间和内存的占用。Jsoup主要提供了以下几个功能:
1)解析,通过给定的URL地址、html文件或者html格式的字符串来获取数据。
2)查找,通过DOM遍历或者CSS选择器来寻找和抽取数据。
3)操作,能够处理HTML元素、属性和文本,主要包括查找和修改。
4)检查,通过白名单机制来保护HTML内容的安全。
2 Jsoup的优势
1)无需数据库支持
有时候在制作一些手机APP时,出于安全性因素考虑,对方不愿直接提供原始数据库,只提供一个网站给我们充当数据源,也就意味着APP应用中所有的数据都需要从网站中获取,这时候就需要对网页中的html元素进行解析,获取想要的数据。目前市面上有许多主流开源爬虫框架,但如果只是爬取网页中少量数据的情况下,可以自已编写爬虫类,然后利用Jsoup对html元素进行解析即可。
2)无需自己维护
对于app软件的制作,最难的可能还是后期数据的维护工作,尤其是涉及到针对数据的增、删、改等操作,需要考虑后台数据库与手机界面显示数据的同步问题,以及多用户同时操作同一条数据的互锁问题。而Jsoup只是单纯的解析某个网页上的数据,而且网页上的html格式比较固定,而且普通用户往往也无法直接对网页数据进行修改,即使网页数据有所更新,由于html标识未发生改变,用户重新进入app应用后即可看到更新后的数据,故对于开发者无需考虑数据维护的问题。
3)访问数据效率高
大多数的app都会和数据库进行交互,无论是SQLite数据库还是远程的数据库,用户在手机上对数据的修改,都会涉及到两个操作,先将修改后的数据写入数据库,再将新数据从数据库中读出并显示在手机终端,如果连接的是SQLite数据库,则两次操作所耗费的时间很短,几乎可以忽略,但如果连接的是远程的数据库,则需要视网络的连接状况,有时可能需要耗费较长的时间,而且开发者又往往在程序中设置了延时,一旦在延时内仍未获取到最新的数据时,可能就会造成app的异常终止。而使用Jsoup只涉及单方面的读取操作,通过编写的爬虫类抓取html代码,然后再使用Jsoup进行解析网页代码取出相应数据。即使网页数据更改了,如果手机app中设置了向下滑动刷新数据的功能,只需要向下滑动手指即可,或者退出后重新进入该app即可。
4)强大的选择器
在解析并提取 HTML 元素时,以往比较常用的是传统的DOM方式的元素解析。
例如:
其中用到了getElementById()和getElementsByTag()这2个方法,它们分别可以根据HTML元素的id、节点名称来获取对应的元素或元素列表。
一般情况下,一个HTML元素的组成部分包括:节点名、属性和文本。Jsoup的选择器就能够根据这些标识方便的进行数据的检索。在元素检索方面,Jsoup的选取器简直无所不能。无论是在获取数据、修改数据方面极大的减轻了开发者的负担。通过使用语句Document doc = Jsoup.parse(“网页文件”,"UTF-8","BaseURL/"); doc.select(“格式”)分别得到不同类型的数据。具体格式如下表:
以上是最基本的选择器语法,这些语法也可以组合起来使用,具体如表2所示:
除了一些基本的语法以及这些语法进行组合外,Jsoup还支持使用表达式进行元素过滤选择,具体如表3所示:
在Jsoup选择器的上述语法中,比较常用的还是根据html元素的id、class属性以及属性值等格式。在文档成功解析后,顺利的获取了想要的数据,这时可能会需要对某些元素进行修改,例如为链接地址增加属性、为图片增加可点击链接、修改文本内容等。Jsoup中也提供了相应的方法。例如:
除了无法修改标签名外,包括元素的属性和文本都可以修改。通过以上的介绍可以发现,Jsoup 使用跟 jQuery 一模一样的选择器对元素进行检索,操作非常简便,只需要一行代码即可完成。
3 Jsoup的使用方法
第一步:加载HTML页面,生成 Document 对象实例
Jsoup提供了3种方式来加载html页面,它们分别为:
1)根据给定的html格式的字符串加载文档
2)根据给定的URL 地址加载文档
3)根据本地html文件加载 文档
因为 一般的HTML 文档中经常会出现链接、图片以及所引用的外部脚本、css 文件等内容, 在第三种加载文档方式中加入BaseURL 参数的目的就是當 HTML 文档使用相对路径方式引用外部文件时,Jsoup 会自动为这些 URL 加上一个BaseURL地址的前缀 。
以上几种加载HTML文档的方法中,比较常用的是第二种方式。在制作百度新闻手机客户端时,不需要进行登录,也就不用在代码中设置cookie等参数,所以加载百度新闻HTML页面的代码可以这样设置:Document doc = Jsoup.connect("http://news.baidu.com/").timeout(3000) .get();,这里仅仅设置了连接超时为3秒。
第二步:Jsoup解析HTML
在IE浏览器中输入百度新闻网的地址http://news.baidu.com,通过查看该网页的源代码,发现部分html代码如下:
从代码分析中可以看出,新闻列表都被存放在类名为hotnews下,所以获取新闻列表可以通过利用Jsoup选择器中的查找类名的方式完成,因此代码为:
通过Jsoup解析html代码,得到用户想要的数据,另外可以采用Android中的WebView控件在手机中显示数据即可看到效果。
4 总结
本文详细介绍了Jsoup所具备的优势,以及它的使用方法,并简单介绍了如何使用Jsoup抓取百度新闻网的数据。由于 Jsoup 具有良好的可扩展性 API 设计,开发者通过Jsoup功能强大的选择器可以开发出非常强大的 HTML 解析功能,再加上 Jsoup 项目本身的开发也非常活跃,相信对于一些轻量级的Android应用开发,它绝对会是您的一位好帮手!
参考文献:
[1] jsoup[EB/OL]. http://jsoup.org/.
[2] 曾伟辉, 李淼. 深层网络爬虫研究综述[J]. 计算机系统应用, 2008, 17(5).
[3] Jonathan Hedley. Jsoup: Java HTML Parser[EB/OL]. http://jsoup.org/.
[4] 余志龙, 郑名杰. Google.Android.SDK 开发范例大全[M]. 2版. 北京: 人民邮电出版社, 2010.
[5] 墨菲, 李雪飞, 吴明晖. Android开发入门教程[M]. 北京: 人民邮电出版社, 2010.