許清媛,劉韋聲
(中山大學(xué)南方學(xué)院,廣東廣州510970)
隨著智能手機(jī)的普及以及移動互聯(lián)網(wǎng)的迅猛發(fā)展,比起傳統(tǒng)的PC,移動娛樂和移動學(xué)習(xí)越來越受歡迎,移動應(yīng)用軟件的開發(fā)也更熱門。目前,最常見的移動開發(fā)平臺主要有Android,iPhone以及Windows Phone,但無論從全球還是國內(nèi)使用范圍來看,搭載Android移動操作系統(tǒng)的移動終端設(shè)備數(shù)量都占據(jù)絕對的優(yōu)勢[1]。
移動開發(fā)者為了在APP中給用戶提供豐富的內(nèi)容,往往需要大量的數(shù)據(jù)。網(wǎng)絡(luò)爬蟲是一種自動下載網(wǎng)絡(luò)資源的程序,是搜索引擎的基礎(chǔ)構(gòu)件之一[2-3]。而LeanCloud是一個云端數(shù)據(jù)存儲平臺,提供多種版本開發(fā)語言給用戶存儲數(shù)據(jù),用戶通過控制臺可視化看到存在云端的數(shù)據(jù)。本文的技術(shù)方案是:首先通過Jsoup網(wǎng)絡(luò)爬蟲抓取移動開發(fā)需要的海量數(shù)據(jù),然后運(yùn)用LeanCloud的LeanStorage服務(wù),將Jsoup網(wǎng)絡(luò)爬蟲框架抓取的網(wǎng)頁數(shù)據(jù)進(jìn)行篩選、過濾和封裝,然后上傳到LeanCloud云端保存,再開發(fā)APP端直接通過LeanCloud提供的一系列API(應(yīng)用程序編程接口,Application Programming Interface)對數(shù)據(jù)進(jìn)行訪問,可大大節(jié)省APP用戶流量和加載等待時(shí)間。因?yàn)樯蟼髟贫说臄?shù)據(jù)都是經(jīng)過篩選的,并不需要用戶在APP上加載整個網(wǎng)頁數(shù)據(jù)[4],從而軟件響應(yīng)速度快。該技術(shù)為移動開發(fā)提供了一種通用技術(shù)方案,通過此方案抓取不同的數(shù)據(jù)信息,則可開發(fā)出不同的應(yīng)用軟件,本文以雙語閱讀應(yīng)用軟件為例。
電子翻譯工具、英語學(xué)習(xí)平臺、Internet在線翻譯瀏覽器的應(yīng)用對于英語水平不高且又需要了解外文信息的人來說,能夠提供大量更新的在線詞匯和參考例句,提高學(xué)習(xí)和工作效率[5-14]。近十年來,隨著手機(jī)的普及,移動英語學(xué)習(xí)平臺將更好的幫助和彌補(bǔ)貧困地區(qū),資源缺乏地區(qū)的人學(xué)習(xí)英語。文獻(xiàn)[8-14]各提出了一種移動英語學(xué)習(xí)軟件的設(shè)計(jì)方法,但尚未有基于網(wǎng)絡(luò)爬蟲和云存儲的移動英語學(xué)習(xí)軟件出現(xiàn)。
網(wǎng)絡(luò)爬蟲在不同開發(fā)語言下有不同框架,Python語言下有 Scrapy、Beautiful Soup等,Java語言下有HTMLParser、Jsoup等。Java作為Android開發(fā)的主要開發(fā)語言,選擇以Java語言開發(fā)的第三方類庫有利于后期的維護(hù)更新。HTMLParser和Jsoup都是知名度較高的Java第三方HTML解析工具類庫,但HTMLParser使用較為繁瑣,以解析某網(wǎng)頁HTML文本中class屬性為list_box_2的div下的所有鏈接為例,使用HTMLParser解析代碼分別下:
使用Jsoup的解析代碼如下:
從以上兩段代碼可見,基于Jsoup爬蟲技術(shù)的數(shù)據(jù)抓取更加簡潔方便。另外,HTMLParser從2006年后已不再更新,而代碼托管于Github上的Jsoup到目前為止還在持續(xù)更新,且官方網(wǎng)站提供開發(fā)文檔和技術(shù)討論支持,應(yīng)用更為廣泛。作為網(wǎng)絡(luò)爬蟲技術(shù),Jsoup提供了一套非常省力的API,可通過DOM(文檔對象模型,Document Object Model),CSS(層疊樣式表,Cascading Style Sheets)以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)[14-16]。
本文以雙語閱讀應(yīng)用為例,抓取英語學(xué)習(xí)相關(guān)數(shù)據(jù),如圖1所示。目前已經(jīng)抓取的網(wǎng)站有可可英語、愛詞霸、滬江英語等。這里以抓取可可英語網(wǎng)站的雙語閱讀數(shù)據(jù)為例來闡述數(shù)據(jù)抓取的整個過程。
圖1 雙語閱讀數(shù)據(jù)抓取思路
雙語閱讀應(yīng)用需要的是雙語閱讀數(shù)據(jù),每條數(shù)據(jù)應(yīng)包含閱讀新聞標(biāo)題、新聞鏈接、新聞內(nèi)容、圖片鏈接和日期。在瀏覽器中打開雙語閱讀數(shù)據(jù)所在網(wǎng)頁的鏈接,如:http://www.kekenet.com/read/news/Economics/,使用瀏覽器的調(diào)試功能查看網(wǎng)頁源代碼。使用Jsoup可以解析出每條雙語閱讀數(shù)據(jù)的閱讀標(biāo)題、閱讀鏈接、閱讀正文、圖片鏈接和日期。一個網(wǎng)頁一般包含了網(wǎng)站logo、網(wǎng)站banner、導(dǎo)航欄、文本、圖像、flash動畫等內(nèi)容,我們需要對信息進(jìn)行篩選。Jsoup在這方面給開發(fā)者提供了很友好的API供調(diào)用,開發(fā)者可以根據(jù)HTML的class或者id等屬性來獲取所需要的HTML片段。而一些特殊情況下還可以利用Java類庫支持的正則表達(dá)式做進(jìn)一步的內(nèi)容篩選,使用如下代碼實(shí)現(xiàn)。根據(jù)得到的新聞鏈接就可以繼續(xù)抓取文章的內(nèi)容。
一般情況下爬蟲程序不在客戶端執(zhí)行,因?yàn)檫@樣不僅大量消耗客戶端的移動流量,還嚴(yán)重影響APP運(yùn)行速度,給用戶帶來很不好的體驗(yàn),這就需要有一個服務(wù)器端來存儲這些已經(jīng)抓取下來的數(shù)據(jù)并跟客戶端進(jìn)行數(shù)據(jù)交互。然而,同時(shí)維護(hù)客戶端和服務(wù)器端無疑給APP開發(fā)者帶來很大的負(fù)擔(dān),故出現(xiàn)了為廣大移動開發(fā)者提供后端支持的BaaS(后端即服務(wù):Backend as a Service)服務(wù)。BaaS平臺是為移動應(yīng)用開發(fā)者提供的旨在整合云后端的邊界服務(wù),包括計(jì)算、存儲、PUSH、計(jì)量等多種服務(wù),其目的在于簡化開發(fā)、部署的過程,使得開發(fā)者專注于自身應(yīng)用程序的開發(fā)與推廣[7]。
LeanCloud提供一站式后端云服務(wù),包括云存儲、數(shù)據(jù)分析、用戶關(guān)系、消息推送、即時(shí)通信等現(xiàn)代應(yīng)用基礎(chǔ)模塊。通過LeanCloud云服務(wù),實(shí)現(xiàn)數(shù)據(jù)的保存與查詢獲取變得十分方便和可靠。LeanCloud官方提供了多種開發(fā)語言版本的SDK和REST API供開發(fā)者調(diào)用,大大簡化了開發(fā)流程。本文前面提到的數(shù)據(jù)抓取程序?qū)?shù)據(jù)抓取下來進(jìn)行篩選后就可存到LeanCloud云端。LeanCloud提供數(shù)據(jù)可視化的網(wǎng)頁端控制臺,數(shù)據(jù)成功存儲到LeanCloud云端后可以在控制臺查看,也可以通過控制臺進(jìn)行據(jù)的增刪、查找、修改等操作。
圖2是LeanCloud控制臺顯示的部分?jǐn)?shù)據(jù),其中newsTitle、newsUrl、imageUrl、postTime、newsContent這幾個字段分別表示閱讀標(biāo)題、閱讀鏈接、圖片鏈接、日期、閱讀正文。
圖2 LeanCloud控制臺顯示的數(shù)據(jù)(部分)
客戶端承擔(dān)著與用戶進(jìn)行交互的任務(wù),在文章前面部分介紹了基于網(wǎng)絡(luò)爬蟲的數(shù)據(jù)抓取和基于LeanCloud數(shù)據(jù)存儲,最終目的就是給客戶端更好地使用這些數(shù)據(jù)??蛻舳诵枰o用戶展示存儲在LeanCloud云端的雙語閱讀數(shù)據(jù)并盡可能地提供良好的用戶交互體驗(yàn)。圖3是Android客戶端開發(fā)思路。
圖3 Android客戶端開發(fā)思路
獲取存儲在LeanCloud的數(shù)據(jù)有兩種方式,一種是使用LeanCloud提供的Android版本SDK開發(fā)包,第二種是使用LeanCloud提供的RECT API。第一種方式需要引入LeanCloud開發(fā)的jar包,開發(fā)者只需要根據(jù)官方開發(fā)文檔運(yùn)用Java開發(fā)知識即可使用,但是引入jar包無疑增加了最后生成的apk文件的大小,且代碼較多。第二種方式是使用RECT API,我們只需要發(fā)送HTTP請求來與LeanCloud進(jìn)行交互即可。
LeanCloud云端給客戶端返回的是一段json字符串,里面包含多條數(shù)據(jù)。開發(fā)者還可以在請求URL后面添加查詢約束語句,根據(jù)約束條件獲取數(shù)據(jù),比如添加返回?cái)?shù)據(jù)條數(shù)的約束條件、根據(jù)某字段升降序的約束條件等。
在雙語閱讀應(yīng)用的設(shè)計(jì)之中,基于Android平臺,用戶只需在軟件界面中點(diǎn)擊雙語閱讀應(yīng)用的圖標(biāo),就可以進(jìn)入雙語閱讀程序主界面。客戶端此時(shí)向LeanCloud云端發(fā)送請求獲取雙語閱讀數(shù)據(jù),待數(shù)據(jù)獲取成功后顯示數(shù)據(jù)。等用戶滑動屏幕且到達(dá)最后一條數(shù)據(jù)后會再次向LeanCloud云端請求更多的數(shù)據(jù)。APP主界面使用RecyclerView+CardView展現(xiàn)雙語閱讀文章列表。
用戶點(diǎn)擊對應(yīng)數(shù)據(jù)后會進(jìn)入該文章的正文內(nèi)容,需要注意的是存儲在LeanCloud云端的正文內(nèi)容是一段HTML代碼,所以TextView顯示HTML文本時(shí)需要使用代碼textView.setText(Html.fromHtml(htmlContent))。最后客戶端展示效果如圖4和5所示。
圖4 雙語閱讀文章列表界面
圖5 文章正文界面
Jsoup是一款強(qiáng)大的Java第三方類庫,項(xiàng)目開源且版本在持續(xù)更新,它給開發(fā)者應(yīng)用網(wǎng)絡(luò)爬蟲進(jìn)行數(shù)據(jù)抓取提供了極大的便利。在這個移動互聯(lián)網(wǎng)時(shí)代,直接選擇現(xiàn)在已經(jīng)趨于成熟的BaaS平臺進(jìn)行數(shù)據(jù)篩選和存取,可提高軟件響應(yīng)速度,降低客戶端流量,從而提供更好的客戶端體驗(yàn)。本文先利用Jsoup技術(shù)抓取網(wǎng)頁數(shù)據(jù)并篩選出需要的信息,然后進(jìn)行封裝存儲到LeanCloud云存儲平臺,最后在Android設(shè)備上利用這些數(shù)據(jù)開發(fā)了一套雙語閱讀應(yīng)用軟件。應(yīng)用效果顯示,這款基于爬蟲和LeanCloud數(shù)據(jù)存儲的Android雙語閱讀軟件響應(yīng)速度快、信息處理速度快。
[1]沈成,張凱,呂偉鵬,等.基于Android平臺的課程學(xué)習(xí)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].重慶工商大學(xué)學(xué)報(bào):自然科學(xué)版,2014,31(1):56-60.
[2]彭紀(jì)奔,吳林,陳賢,等.基于爬蟲技術(shù)的網(wǎng)絡(luò)負(fù)面情緒挖掘系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(10):9-13.
[3]潘慶和.一種通用分布式數(shù)據(jù)抓取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].哈爾濱商業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2016,32(3):307-312.
[4]崔丹.BaaS平臺:移動互聯(lián)網(wǎng)與云計(jì)算融合的產(chǎn)物[J].軟件和信息服務(wù),2012(9):1.
[5]許智堅(jiān).信息技術(shù)環(huán)境下的電子翻譯工具[J].嘉應(yīng)學(xué)院學(xué)報(bào):哲學(xué)社會科學(xué),2011,29(1):91-96.
[6]楊興鈺.基于Android的英語視頻學(xué)習(xí)軟件設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2016,24(17):64-66.
[7]王明明.一種基于.net的輔助翻譯課程自動在線系統(tǒng)設(shè)計(jì)[J].自動化與儀器儀表,2016(8):180-181.
[8]程蔚,周蘭江,王紅斌,等.基于Android的旅行翻譯語音情景助手APP設(shè)計(jì)與實(shí)現(xiàn)[J].微型電腦應(yīng)用,2016,32(4):30-33.
[9]黃藝鋒,閆巧.基于Android平臺電子詞典的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2011,31(s2):228-232.
[10]徐毅,田春燕.基于Android的移動英語學(xué)習(xí)平臺的研究與實(shí)現(xiàn)[J].中國教育信息化,2014(4):87-89.
[11]楊興鈺.基于情感感知的移動英語學(xué)習(xí)軟件設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2016,24(14):37-39.
[12]孫遜,鮮學(xué)豐,陳天樂,等.基于Android系統(tǒng)的英語聽、說自主學(xué)習(xí)軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2015(12):104-107.
[13]楊興鈺.基于Android平臺的自助式英文學(xué)習(xí)軟件的開發(fā)與設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016,24(16):137-138.
[14]田晶.基于網(wǎng)絡(luò)的英語教學(xué)軟件的研究與設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016,24(5):81-83.
[15]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2010.
[16]劉全志,于治樓.基于Heritrix和Jsoup的信息抽取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].山東師范大學(xué)學(xué)報(bào):自然科學(xué)版,2015,30(2):16-19.