李世忠

摘要 設計了一種網頁數據采集系統。采集的數據統一保存到系統數據庫,系統輔助用戶完成常規采集參數的設置,包括訪問間隔時間及數據存儲方式等。用戶對需要采集的數據進行描述,多次訓練系統進行數據采集,生成數據識別模型。在目標網頁發生變化時,在一定的范圍內根據識別模型自動進行修正以適應新的網頁結構,減少采集工作的人工干預工作量。
【關鍵詞】數據采集系統 HTML 網頁抓取
1 引言
以往傳統的數據采集方式,通過使用爬蟲程序將相關的Web頁面下載到本地,然后根據XPATH或是正則表達式從頁面的HTML中解析出結構化的數據。這種方式在目標的頁面時常更新時,就需要投入大量的人力去做匹配規則更新,如果有一種技術能夠識別并自動完成采集規則的修正,將會非常有意義。
2 工作原理
無論網頁的內容如何變化,基本的用途是不會改變的:顯示客戶能夠識別的內容(文字或是圖片)并依據一定的設計規范;有標題欄、導航或操作欄,內容顯示區域等。
通過抓取程序將HTML內容下載到本地,再通過算法將HTML格式的內容轉換為標準的XML文檔,由于HTML的編寫可以不用很嚴謹,所以需要在轉換時根據XML的標準進行修正。再由XML解析程序將XML內容進行格式化處理,加載識別模型中由模型進行分類整理,標記出哪些內容是屬于正文、標題、列表、等數據;其流程如圖1所示。
3 數據采集系統設計
3.1 系統設計原則
軟件在設計時確定了“先進性、可擴展性、可伸縮性和易維護性”的原則。具體要求的設計原則如下:
(1)采用三層結構,界面采用組件化的設計,數據庫表能根據代碼自動生成,保持了技術的先進性。
(2)整理個程序由多個軟件包組成,使用基于接口的方式進行開發,可以單獨替換某一個軟件包而不用整個系統重新編譯,以提供可擴展性。
(3)系統采集中間層語言運行,軟件不需要進行安裝,拷貝到文件目錄就可以正常運行。
(4)數據采集與轉換組件可運行在單獨計算機中,當采集性不足時可以通過簡單的增加采集節點來提升數據處理規模及速度,保障系統的可伸縮性。
3.2 總體的系統設計
采集系統采用混合架構。服務端為B/S架構,客戶端采用C/S結構;客戶端通過WebService服務與服務端進行通信,獲取采集任務及相關的參數配置并負責具體的網頁數據攻取操作,然后將數據上傳給中心服務,服務器再對數據進行集中的處理與轉換操作。
服務端采用ASP.NET MVC+Service.客戶端采用C#桌面和控制臺程序。
整個系統分為三層:數據采集層、數據存儲層及數據轉換層。
4 實現的關鍵技術
4.1 分布程序間通信技術
系統采用組件的設計,采用Weo Service技術來進行多程序間的數據傳輸。
4.2 網絡安全技術
網絡傳輸安全主要采用SSL(Secure SocketLayer)技術來實現。SSL技術是目前應該比較廣泛的通信安全技術,可以保證兩個系統間的通訊安全。
4.3 數據分類及轉換模型
數據轉換程序使用C#語言進行開發,為保證轉換的速度,XML的數據都提高加載到內存進行處理。
數據分類:服務器端程序將需要處理的XML數據發送到MSMQ消息隊列,數據轉換程序從消息中依次取出數據對數據進行處理,具體要求的分類規則如下:
(1)基于標準的HTML/HTML5標簽的常用定義規范,將節點數據分類為:村標題、內容、內容條目、條目數據等。
(2)對分類之后的數據再次進行預定義規則匹配,如果能滿足則證明數據可用,否則使用模型數據庫中存儲的下一條解析規則處理至到滿足為止。
模型轉換:轉換程序由C#語言開發使用XML和JSON轉換技術,根據XML的分類數據,從組件庫中選擇轉換代碼對數據進行轉換,最后生成JSON數據。
5 結束語
通過將規范的HTML內容轉換為嚴格的XML數據,對數據進行的規范化的處理,再利用模型庫的規則對數據進行分類,再利用轉換程序對數據進行處理分解數據采集的操作,每個過程都可定制和和單獨替換,減少了因網頁變動對系統的調整工作量。