許清媛,劉韋聲
(中山大學南方學院,廣東廣州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]各提出了一種移動英語學習軟件的設計方法,但尚未有基于網絡爬蟲和云存儲的移動英語學習軟件出現。
網絡爬蟲在不同開發語言下有不同框架,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類庫支持的正則表達式做進一步的內容篩選,使用如下代碼實現。根據得到的新聞鏈接就可以繼續抓取文章的內容。


一般情況下爬蟲程序不在客戶端執行,因為這樣不僅大量消耗客戶端的移動流量,還嚴重影響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控制臺顯示的數據(部分)
客戶端承擔著與用戶進行交互的任務,在文章前面部分介紹了基于網絡爬蟲的數據抓取和基于LeanCloud數據存儲,最終目的就是給客戶端更好地使用這些數據??蛻舳诵枰o用戶展示存儲在LeanCloud云端的雙語閱讀數據并盡可能地提供良好的用戶交互體驗。圖3是Android客戶端開發思路。

圖3 Android客戶端開發思路
獲取存儲在LeanCloud的數據有兩種方式,一種是使用LeanCloud提供的Android版本SDK開發包,第二種是使用LeanCloud提供的RECT API。第一種方式需要引入LeanCloud開發的jar包,開發者只需要根據官方開發文檔運用Java開發知識即可使用,但是引入jar包無疑增加了最后生成的apk文件的大小,且代碼較多。第二種方式是使用RECT API,我們只需要發送HTTP請求來與LeanCloud進行交互即可。
LeanCloud云端給客戶端返回的是一段json字符串,里面包含多條數據。開發者還可以在請求URL后面添加查詢約束語句,根據約束條件獲取數據,比如添加返回數據條數的約束條件、根據某字段升降序的約束條件等。
在雙語閱讀應用的設計之中,基于Android平臺,用戶只需在軟件界面中點擊雙語閱讀應用的圖標,就可以進入雙語閱讀程序主界面??蛻舳舜藭r向LeanCloud云端發送請求獲取雙語閱讀數據,待數據獲取成功后顯示數據。等用戶滑動屏幕且到達最后一條數據后會再次向LeanCloud云端請求更多的數據。APP主界面使用RecyclerView+CardView展現雙語閱讀文章列表。
用戶點擊對應數據后會進入該文章的正文內容,需要注意的是存儲在LeanCloud云端的正文內容是一段HTML代碼,所以TextView顯示HTML文本時需要使用代碼textView.setText(Html.fromHtml(htmlContent))。最后客戶端展示效果如圖4和5所示。

圖4 雙語閱讀文章列表界面

圖5 文章正文界面
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.