APP下载

基于爬虫和LeanCloud数据存储的双语阅读平台设计

2018-03-29许清媛刘韦声

电子设计工程 2018年2期
关键词:爬虫开发者云端

许清媛,刘韦声

(中山大学南方学院,广东广州510970)

随着智能手机的普及以及移动互联网的迅猛发展,比起传统的PC,移动娱乐和移动学习越来越受欢迎,移动应用软件的开发也更热门。目前,最常见的移动开发平台主要有Android,iPhone以及Windows Phone,但无论从全球还是国内使用范围来看,搭载Android移动操作系统的移动终端设备数量都占据绝对的优势[1]。

移动开发者为了在APP中给用户提供丰富的内容,往往需要大量的数据。网络爬虫是一种自动下载网络资源的程序,是搜索引擎的基础构件之一[2-3]。而LeanCloud是一个云端数据存储平台,提供多种版本开发语言给用户存储数据,用户通过控制台可视化看到存在云端的数据。本文的技术方案是:首先通过Jsoup网络爬虫抓取移动开发需要的海量数据,然后运用LeanCloud的LeanStorage服务,将Jsoup网络爬虫框架抓取的网页数据进行筛选、过滤和封装,然后上传到LeanCloud云端保存,再开发APP端直接通过LeanCloud提供的一系列API(应用程序编程接口,Application Programming Interface)对数据进行访问,可大大节省APP用户流量和加载等待时间。因为上传云端的数据都是经过筛选的,并不需要用户在APP上加载整个网页数据[4],从而软件响应速度快。该技术为移动开发提供了一种通用技术方案,通过此方案抓取不同的数据信息,则可开发出不同的应用软件,本文以双语阅读应用软件为例。

电子翻译工具、英语学习平台、Internet在线翻译浏览器的应用对于英语水平不高且又需要了解外文信息的人来说,能够提供大量更新的在线词汇和参考例句,提高学习和工作效率[5-14]。近十年来,随着手机的普及,移动英语学习平台将更好的帮助和弥补贫困地区,资源缺乏地区的人学习英语。文献[8-14]各提出了一种移动英语学习软件的设计方法,但尚未有基于网络爬虫和云存储的移动英语学习软件出现。

1 系统设计与实现

1.1 Jsoup爬虫实现数据抓取

网络爬虫在不同开发语言下有不同框架,Python语言下有 Scrapy、Beautiful Soup等,Java语言下有HTMLParser、Jsoup等。Java作为Android开发的主要开发语言,选择以Java语言开发的第三方类库有利于后期的维护更新。HTMLParser和Jsoup都是知名度较高的Java第三方HTML解析工具类库,但HTMLParser使用较为繁琐,以解析某网页HTML文本中class属性为list_box_2的div下的所有链接为例,使用HTMLParser解析代码分别下:

使用Jsoup的解析代码如下:

从以上两段代码可见,基于Jsoup爬虫技术的数据抓取更加简洁方便。另外,HTMLParser从2006年后已不再更新,而代码托管于Github上的Jsoup到目前为止还在持续更新,且官方网站提供开发文档和技术讨论支持,应用更为广泛。作为网络爬虫技术,Jsoup提供了一套非常省力的API,可通过DOM(文档对象模型,Document Object Model),CSS(层叠样式表,Cascading Style Sheets)以及类似于jQuery的操作方法来取出和操作数据[14-16]。

本文以双语阅读应用为例,抓取英语学习相关数据,如图1所示。目前已经抓取的网站有可可英语、爱词霸、沪江英语等。这里以抓取可可英语网站的双语阅读数据为例来阐述数据抓取的整个过程。

图1 双语阅读数据抓取思路

双语阅读应用需要的是双语阅读数据,每条数据应包含阅读新闻标题、新闻链接、新闻内容、图片链接和日期。在浏览器中打开双语阅读数据所在网页的链接,如:http://www.kekenet.com/read/news/Economics/,使用浏览器的调试功能查看网页源代码。使用Jsoup可以解析出每条双语阅读数据的阅读标题、阅读链接、阅读正文、图片链接和日期。一个网页一般包含了网站logo、网站banner、导航栏、文本、图像、flash动画等内容,我们需要对信息进行筛选。Jsoup在这方面给开发者提供了很友好的API供调用,开发者可以根据HTML的class或者id等属性来获取所需要的HTML片段。而一些特殊情况下还可以利用Java类库支持的正则表达式做进一步的内容筛选,使用如下代码实现。根据得到的新闻链接就可以继续抓取文章的内容。

1.2 LeanCloud数据存储

一般情况下爬虫程序不在客户端执行,因为这样不仅大量消耗客户端的移动流量,还严重影响APP运行速度,给用户带来很不好的体验,这就需要有一个服务器端来存储这些已经抓取下来的数据并跟客户端进行数据交互。然而,同时维护客户端和服务器端无疑给APP开发者带来很大的负担,故出现了为广大移动开发者提供后端支持的BaaS(后端即服务:Backend as a Service)服务。BaaS平台是为移动应用开发者提供的旨在整合云后端的边界服务,包括计算、存储、PUSH、计量等多种服务,其目的在于简化开发、部署的过程,使得开发者专注于自身应用程序的开发与推广[7]。

LeanCloud提供一站式后端云服务,包括云存储、数据分析、用户关系、消息推送、即时通信等现代应用基础模块。通过LeanCloud云服务,实现数据的保存与查询获取变得十分方便和可靠。LeanCloud官方提供了多种开发语言版本的SDK和REST API供开发者调用,大大简化了开发流程。本文前面提到的数据抓取程序将数据抓取下来进行筛选后就可存到LeanCloud云端。LeanCloud提供数据可视化的网页端控制台,数据成功存储到LeanCloud云端后可以在控制台查看,也可以通过控制台进行据的增删、查找、修改等操作。

图2是LeanCloud控制台显示的部分数据,其中newsTitle、newsUrl、imageUrl、postTime、newsContent这几个字段分别表示阅读标题、阅读链接、图片链接、日期、阅读正文。

图2 LeanCloud控制台显示的数据(部分)

1.3 Android客户端开发

客户端承担着与用户进行交互的任务,在文章前面部分介绍了基于网络爬虫的数据抓取和基于LeanCloud数据存储,最终目的就是给客户端更好地使用这些数据。客户端需要给用户展示存储在LeanCloud云端的双语阅读数据并尽可能地提供良好的用户交互体验。图3是Android客户端开发思路。

图3 Android客户端开发思路

获取存储在LeanCloud的数据有两种方式,一种是使用LeanCloud提供的Android版本SDK开发包,第二种是使用LeanCloud提供的RECT API。第一种方式需要引入LeanCloud开发的jar包,开发者只需要根据官方开发文档运用Java开发知识即可使用,但是引入jar包无疑增加了最后生成的apk文件的大小,且代码较多。第二种方式是使用RECT API,我们只需要发送HTTP请求来与LeanCloud进行交互即可。

LeanCloud云端给客户端返回的是一段json字符串,里面包含多条数据。开发者还可以在请求URL后面添加查询约束语句,根据约束条件获取数据,比如添加返回数据条数的约束条件、根据某字段升降序的约束条件等。

2 系统实现与效果展示

在双语阅读应用的设计之中,基于Android平台,用户只需在软件界面中点击双语阅读应用的图标,就可以进入双语阅读程序主界面。客户端此时向LeanCloud云端发送请求获取双语阅读数据,待数据获取成功后显示数据。等用户滑动屏幕且到达最后一条数据后会再次向LeanCloud云端请求更多的数据。APP主界面使用RecyclerView+CardView展现双语阅读文章列表。

用户点击对应数据后会进入该文章的正文内容,需要注意的是存储在LeanCloud云端的正文内容是一段HTML代码,所以TextView显示HTML文本时需要使用代码textView.setText(Html.fromHtml(htmlContent))。最后客户端展示效果如图4和5所示。

图4 双语阅读文章列表界面

图5 文章正文界面

3 结束语

Jsoup是一款强大的Java第三方类库,项目开源且版本在持续更新,它给开发者应用网络爬虫进行数据抓取提供了极大的便利。在这个移动互联网时代,直接选择现在已经趋于成熟的BaaS平台进行数据筛选和存取,可提高软件响应速度,降低客户端流量,从而提供更好的客户端体验。本文先利用Jsoup技术抓取网页数据并筛选出需要的信息,然后进行封装存储到LeanCloud云存储平台,最后在Android设备上利用这些数据开发了一套双语阅读应用软件。应用效果显示,这款基于爬虫和LeanCloud数据存储的Android双语阅读软件响应速度快、信息处理速度快。

[1]沈成,张凯,吕伟鹏,等.基于Android平台的课程学习系统的设计与实现[J].重庆工商大学学报:自然科学版,2014,31(1):56-60.

[2]彭纪奔,吴林,陈贤,等.基于爬虫技术的网络负面情绪挖掘系统设计与实现[J].计算机应用与软件,2016,33(10):9-13.

[3]潘庆和.一种通用分布式数据抓取系统的设计与实现[J].哈尔滨商业大学学报:自然科学版,2016,32(3):307-312.

[4]崔丹.BaaS平台:移动互联网与云计算融合的产物[J].软件和信息服务,2012(9):1.

[5]许智坚.信息技术环境下的电子翻译工具[J].嘉应学院学报:哲学社会科学,2011,29(1):91-96.

[6]杨兴钰.基于Android的英语视频学习软件设计与实现[J].电子设计工程,2016,24(17):64-66.

[7]王明明.一种基于.net的辅助翻译课程自动在线系统设计[J].自动化与仪器仪表,2016(8):180-181.

[8]程蔚,周兰江,王红斌,等.基于Android的旅行翻译语音情景助手APP设计与实现[J].微型电脑应用,2016,32(4):30-33.

[9]黄艺锋,闫巧.基于Android平台电子词典的设计与实现[J].计算机应用,2011,31(s2):228-232.

[10]徐毅,田春燕.基于Android的移动英语学习平台的研究与实现[J].中国教育信息化,2014(4):87-89.

[11]杨兴钰.基于情感感知的移动英语学习软件设计与实现[J].电子设计工程,2016,24(14):37-39.

[12]孙逊,鲜学丰,陈天乐,等.基于Android系统的英语听、说自主学习软件的设计与实现[J].计算机与现代化,2015(12):104-107.

[13]杨兴钰.基于Android平台的自助式英文学习软件的开发与设计[J].电子设计工程,2016,24(16):137-138.

[14]田晶.基于网络的英语教学软件的研究与设计[J].电子设计工程,2016,24(5):81-83.

[15]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.

[16]刘全志,于治楼.基于Heritrix和Jsoup的信息抽取系统的设计与实现[J].山东师范大学学报:自然科学版,2015,30(2):16-19.

猜你喜欢

爬虫开发者云端
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
云端之城
利用爬虫技术的Geo-Gnutel la VANET流量采集
美人如画隔云端
大数据环境下基于python的网络爬虫技术
行走在云端
云端创意
“85后”高学历男性成为APP开发新生主力军
16%游戏开发者看好VR