陳新,周斯黎
(湖南省第一測繪院,湖南 衡陽 421001)
移動數字城市應用平臺服務端系統數據整合模塊的實現途徑
陳新*,周斯黎
(湖南省第一測繪院,湖南 衡陽 421001)
本文主要對移動數字城市應用平臺服務端系統數據整合模塊進行分析研究,通過對數據整合模塊的總體結構進行設計與建構,分析模塊核心功能的技術流程,并對數據整合功能的關鍵步驟進行系統闡述,總結出應用平臺數據整合模塊的實現途徑。
數字城市;應用平臺;數據整合模塊;信息抓取
數據整合模塊是以子系統的形式進行運行,作為移動數字城市應用平臺服務端系統的重要組成部分,在實現數據整合功能的過程中,根據需求確定數據來源,采取合適的技術手段獲取數據源信息,通過統一的處理流程進行信息分析,從中提取有效內容,最后經過特定的格式化將這些信息存儲到系統數據庫中(圖1)。
在數據來源的Web頁面中,可通過HTTP GET請求獲得頁面信息進行抽取,有些頁面則需要通過HTTP POST請求才能獲得頁面信息,有的則是以Web Service服務接口的形式向系統提供。面對這種復雜情況,系統應具有滿足各種條件的信息抽取手段,即系統應當支持采用多種方式來獲取數據源的頁面信息,分析頁面結構,從中獲取主要信息,最后將提取出來的結果存入數據庫。
2.1 獲取網頁信息
網頁信息都是以超文本形式組成,通過分析超文本信息,完成對網頁主體內容的抽取。網頁的超文本信息就是網頁的源代碼,因此在網頁信息抽取的第一步就是需要獲取數據來源頁面的源代碼。
2.2 基于規則的信息提取

圖1 數據整合模塊的總體設計示意圖Fig.1 Overall design of data integration module
在獲得頁面源代碼之后,程序首先將HTML文檔裝載,目的是為了得到形式上的XML文檔(是指文檔仍然按照半結構化的HTML格式來標記,但又支持XML的語法解析),使用Xpath位置路徑表達式定位待抽取的內容,從而生成依據Xpath位置路徑表達式定義的核心抽取規則[1]。
明確劃分同類頁面邊界之后,找到并分析頁面列表的主體內容所在的節點,確定列表中每個有效內容發布頁面的標題、發布日期以及URL等信息,根據這些內容發布頁面的鏈接地址獲得內容頁面文檔,在了解內容頁面文檔的結構之后,設計出合理的Xpath位置路徑表達式得到有效內容的節點,得到信息的標題、發布時間、正文內容、正文圖片、正文附件等在內的數據元素。
2.3 正文內容處理
在獲取到頁面中包含了正文內容的節點后,程序根據節點中數據的類型進行分類處理。對于文本數據,程序會以段落的形式讀取數據并清理文本中的HTML符號,使用對應的<text>標簽頭進行封裝。對于圖片數據,程序會將包含圖片數據類型的節點放到集合中,通過遍歷整個集合將圖片下載到服務器端的文件系統中,再以<img>標簽頭表示出每張圖片在文件系統中的路徑。某些信息發布頁面會帶有附件,為了方便客戶端用戶獲得這些附件,服務端在信息抽取時需要將這些附件也一并抓取。
系統在完成網頁信息抽取工作后,會得到這些信息對象的集合,然后依據信息的時間順序將它們按照其所屬的信息類型存入服務端數據庫對應的表中,抓取信息過程如圖2所示。
數據整合模塊在設計中引入內容格式化的目的是為了方便信息在移動客戶端的顯示,保留了信息等在原始數據來源頁面的布局,節省了移動數字城市應用平臺管理人員的調整工作。
數據整合模塊基于.NET Framework 4.0框架使用C#語言開發,整個項目程序集包括:程序入口、功能類、輔助類以及配置文件。
C#默認使用Program.cs類中的Main函數作為程序的入口點,通過Main函數啟動程序開始進行信息抓取,程序運行后采取進程常駐的形式,根據系統設置的時間,每完成一次抓取流程,工作主線程就掛起一段時間,從而實現間隔性的信息抓取,保證了信息的實時性。
功能類是整個數據整合模塊的核心類,其負責網頁信息抓取的絕大部分任務,包括獲取頁面HTML文檔、基于規則提取頁面內容、格式化生成最終結果等主要工作流程。
輔助類主要包括用來描述信息對象模型的Info類和Meeting類、記錄日志的Logger類以及定義數據庫操作的Dbcontext類。
程序集的依賴項之間的關系如圖3,其中包括了程序入口、功能類等項目文件之間的邏輯調用關系,另外還有外部依賴項,主要是一些支持程序集運行的動態鏈接庫文件。
4.1 獲取網頁信息
網頁信息一般都包含在網頁的HTML文檔中,從圖1總體設計示意圖中可以看出,數據整合模塊首先要解決的就是通過各種請求方式從數據源中獲得目標網頁的源代碼。
根據目前服務端系統的數據需求種類和數字城市信息發布網站的響應特點,程序需要提供三種請求方式分別是:HTTP GET請求、HTTP POST請求以及調用Web Service服務請求[2]。

圖2 數據整合模塊的網頁信息抓取流程圖Fig.2 Data integration module web information grab flow chart

圖3 程序集依賴項關系圖Fig.3 Assembly dependency relation graph
程序使用的HTTP GET的請求方法是基于C#中的WebRequest類實現的。WebRequest類是.NET Framework平臺中的符合請求/響應模型的抽象基類,通常用于訪問Internet數據。使用該請求/響應模型的應用程序可以在協議未知的情況下從通信遠端請求數據,在這種方式下,應用程序處理WebRequest類的實例,而協議特定的子類則執行請求的具體細節。
程序中使用HTTP GET請求獲取Web頁面源代碼的方法需要提供目標Web頁面的URL和字符編碼格式兩個參數,方法執行成功后,返回結果為目標Web頁面的源代碼,其實現的代碼片段如下:

程序使用的HTTP POST的請求方法也是基于WebRequest類實現的,但與HTTP GET請求方式有所差異,程序需要在Request對象中顯式指定請求為Post類型,并且根據目標頁面的參數要求,將請求內容體以字符流的形式寫入到Request對象中。
請求方法需要提供目標Web頁面的URL和合理的Post請求字符串,執行成功后,返回結果為目標Web頁面的源代碼,其實現的代碼片段如下:

程序一方面通過HTTP GET或HTTP POST請求獲得數字城市公眾版網頁上面的數據,另一方面還需要提供能夠調用Web Service服務接口來請求獲得不同應用系統上面的信息的功能。
Web Service是一種輕量級的獨立的通訊技術,可以通過Internet或者Intranet上接收從其它系統中傳遞過來的請求。Web Service一般基于SOAP協議在Web上提供的軟件服務,使用WSDL文件進行說明,并通過UDDI進行注冊。與其它開發平臺不同,C#.NET平臺無需其他的開發工具,其本身就全面支持Web Service,包括對服務器端的請求處理器以及對客戶端發送和接受SOAP消息的支持。在C#.NET平臺上調用Web Service服務接口也比較方便,只需在項目中添加包含Web Service接口的服務引用,就可以快速創建一個服務實例,然后通過調用實例中的方法,傳遞正確參數,就可以接受SOAP消息[3]。
成功添加Web服務引用后將其命名為bitss-OANews,項目將允許實例化bitssNews的服務對象,該服務對象包含一個獲取各類通知的接口GetNewsInfo,接口參數名分別為id和Ticket。其中,id值為28~40的整型數字,Ticket值為固定字符串iiibitss,程序調用GetNewsInfo方法并以XML節點形式接收指定類別的消息數據。
4.2 基于規則的信息提取
程序信息提取的規則核心是基于Xpath位置路徑表達式生成的,所以設計合理有效的Xpath表達式將直接影響到數據抽取結果的準確性。我們在定義信息提取規則時,要考慮不同類型的Web頁面的結構差異,這里涉及到的類型主要是指Web頁面的數據來源類型,此外,信息提取目標頁面還可以根據頁面數據形式分成列表型的網頁和內容型的網頁。
在網頁結構上,一般都是列表型頁面包含了多個內容型網頁的鏈接入口,所以程序在信息提取過程中的邏輯也基本都是一樣的,信息提取的步驟首先是獲取某個列表型的網頁結構信息,然后根據解析結果得到依附于該頁面的多個內容型的網頁節點信息,再對每一個節點進行信息提取以便獲得每一個具體內容頁面的數據[4]。
因為對于數據整合模塊,其多個數據源的數據抽取工作采用的都是如上所述的相同的執行邏輯,只不過在設計Xpath表達式時需要參考不同的網頁結構特點進行設計。本文主要以網絡主頁的新聞頁面為例,介紹程序對于列表型和內容型網頁的信息提取的實現。
平臺新聞的列表頁面通常也被稱為數據密集型網頁(data-rich webpage),因為這種頁面集成了較多有效鏈接,往往也是重要的信息數據源。對于新聞列表頁面,當獲得它的HTML代碼后,就需要展開對其文檔結構進行分析,以期找出頁面的局部信息塊和數據項的分布規律。根據得到的分析結果,可以推出對應每個局部信息塊的Xpath位置路徑表達式,通過推算出的表達式,得到每個局部信息塊的節點信息,然后對節點內的元素進行提取,從而獲得全部數據項。在獲取每條新聞的標題、發布日期和具體頁面的URL地址后,程序會先創建一個新聞實體對象,然后將這些數據放入新聞實體對象中,再根據具體頁面的URL獲得具體新聞頁面的HTML代碼,對該頁面的文檔結構進行分析以獲取新聞正文內容。對正文部分的數據抓取關鍵在于鎖定正文內容所在的節點,以便于提高抓取行為的效率,避免了無用內容干擾結果。在確定新聞正文內容所在的上層節點之后,程序開始對其下層的所有有效的子節點進行遍歷。對于新聞頁面的正文內容,程序中使用的定位獲取頁面中有效子節點元素的Xpath位置路徑表達式,經過實踐檢驗,該表達式基本滿足了對新聞正文內容部分的數據抓取需要。
4.3 正文內容處理
在獲得所有有效內容節點后,程序還要對這些節點中包含的數據類型進行分類處理。一般來說節點中包含的數據分為文本內容、圖片鏈接以及附件名稱和下載鏈接,本文在這里主要是對處理邏輯的具體實現進行說明:
程序首先以HTML節點集合的形式保存所有的有效內容節點,然后遍歷這個節點集合。對于每個節點,程序會判斷這個節點里面的數據類型,具體判斷方法是通過對節點里面特征元素的判定,使用<img src=></img>或者<input src=/>標簽進行定義,對于包含附件數據的節點元素,一般使用<a href=></a>這樣的超鏈接定義標簽。
對上述這種具有顯性語義特征的判定方法,程序主要依賴于兩種實現方法:一是采用正則表達式匹配節點中符合特定標簽格式的文本,再從文本中解析出數據內容;二是利用Xpath表達式查找含有特定屬性的節點,當沒有找到合適節點,表明節點中不包含圖片或附件數據,否則,表明節點是屬于圖片或者附件的數據類型節點。
當程序完成對各種數據類型節點的分類后,開始對數據進行解析和抓取,程序先使用正則表達式替換無效的HTML標簽或者符號,然后會以換行符“ ”為文本進行分行,這樣可以較好地將網頁原文中的段落格式保留下來,最后在每行非空的字符串之前加上<text>標簽頭,保存到新聞對象的新聞正文中。
對于每一個圖片數據節點,程序會獲得節點中關于圖片鏈接地址的屬性,再以圖片在正文出現的次序重命名圖片并進行下載,圖片的下載路徑為程序指定的目錄加上以新聞序號命名的文件夾。圖片下載成功后,程序會在新聞對象的正文內容中加入以<img>標簽頭表示出每張圖片在文件系統中的路徑。
對于每一個附件數據節點,程序對其分析的邏輯與圖片節點的處理邏輯基本類似,附件的下載文件名也是以附件相對于在正文出現的次序加上文件格式重命名建立的,唯一不同之處在于附件相比于圖片還需要保留附件名稱,附件名稱一般會在網頁中定義附件數據的超鏈接標簽中。當程序將附件下載成功后,會以<attname>標簽頭表示附件名稱,以<atturl>標簽頭表示附件在服務端文件系統的路徑,然后將這些信息放入到新聞對象的正文內容部分。
本文對于移動數字城市應用平臺服務端數據整合模塊進行了總體設計,重點參考了移動互聯網的特點,采用輕量級的開發框架以及基于JSON格式的數據傳輸方法,針對于目前數字城市網絡布局的分散性和封閉性,采用網頁信息抽取技術將不同來源的信息統一整合到系統數據庫中,以便實現客戶端及時獲得最新的數字城市資訊。
[1] Mark Priestley.面向對象設計UML實踐[M].第二版.龔曉慶,卞雷.北京:清華大學出版社,2011: 1-8.
[2] 王珊,劉怡.Sybase PowerDesigner原理和使用高級指南[M].北京:中國水利水電出版社,2010: 112-152.
[3] 程杰.大話設計模式[M].北京: 清華大學出版社,2011: 71-72.
[4] James W.Cooper.C#設計模式[M].張志華,劉云鵬.北京:電子工業出版社,2011: 85.
[5] 高靜,段會川.基于移動設備的JSON數據傳輸效率研究[J].信息技術與信息化,2011,12(1): 13-15.
[6] 趙池龍.實用軟件工程[M].北京:電子工業出版社,2011: 84-85.
Realization on the Data Integration Mode of System Platform Service Terminal Mobile Digital City
Chen Xin, Zhou Sili
(The First Surveying and Mapping Institute of Hunan, Hengyang Hunan 421001)
This paper provides the data integration mode of system platform service terminal mobile digital city.Firstly, we design and construct the systematical structure of data integration mode.Then, the technical procedure of the mode core function is analyzed.Finally, the key process of data integration function is provided.
digital city; platform; data integration; information capture
F301.2
B
1672-5603(2016)04-087-6
*第一作者簡介 陳新,男,1978年生,軟件工程專業,高級工程師,主要從事測繪、國土規劃軟件開發應用等工作。E-mail:438178001@qq.com
2016-6-21;改回日期:2016-7-25。