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