羅錦才
【摘要】本文介紹了基于MSHTML設(shè)計開發(fā)的網(wǎng)頁信息表格化提取程序的原理、程序結(jié)構(gòu)和工作流程,使用網(wǎng)頁信息提取、網(wǎng)頁元素解析、采集配置管理三大功能模塊,實現(xiàn)對網(wǎng)頁及其內(nèi)部關(guān)聯(lián)信息的提取、解析、整理和表格化顯示,創(chuàng)新使用了對網(wǎng)頁屬性值和樹路徑值進(jìn)行確認(rèn)的二元檢查機(jī)制,能夠?qū)崿F(xiàn)對指定信息的準(zhǔn)確提取。本文還舉例說明了程序的操作步驟和實際效果。
【關(guān)鍵詞】MSHTML 信息自動提取 網(wǎng)頁元素屬性 表格化顯示
【中圖分類號】G64 【文獻(xiàn)標(biāo)識碼】A 【文章編號】2095-3089(2017)10-0229-02
引言
當(dāng)今是網(wǎng)絡(luò)高速發(fā)展、信息量急劇膨脹的信息時代,人們通過信息來互相交流,認(rèn)識世界。在信息中存在著大量有價值的信息要素,這些有價值的信息要素大都以網(wǎng)頁的形式存在,其內(nèi)容和格式千差萬別。如果通過瀏覽器進(jìn)行瀏覽和閱讀不存在問題,但若需要將感興趣的某類信息及其內(nèi)部關(guān)聯(lián)信息保存下來并進(jìn)行整理,目前常用的工具普遍存在著某些缺點(diǎn),比如網(wǎng)絡(luò)蜘蛛等爬蟲工具無法實現(xiàn)對內(nèi)部關(guān)聯(lián)信息的提取。因此,本人作者使用MSHTML語言設(shè)計了網(wǎng)頁內(nèi)部表格化提取的自動程序,可以完成對網(wǎng)頁及內(nèi)部關(guān)聯(lián)信息的保存、整理和表格化顯示,能夠明顯提高對信息的利用效率。
1.程序的設(shè)計思想
1.1 采集原理
眾所周知網(wǎng)頁是由HTML語言描述的,采集網(wǎng)頁中信息的實質(zhì)是從網(wǎng)頁的HTML代碼中提取我們需要的信息,如果直接從代碼中提取,只能采取諸如正則表達(dá)式等文本匹配的方式進(jìn)行采集。這樣就會產(chǎn)生以下問題:一是使用不便,使用者不僅要了解HTML,還要了解正則表達(dá)式,此外還需要在大量的HTML代碼中找到所需信息,然后考慮如何進(jìn)行匹配;二是容錯性差,代碼中如果出現(xiàn)些許偏差就會導(dǎo)致文本匹配失敗,如碰到制表符、回車、空格等等。
經(jīng)過長期研究,作者發(fā)現(xiàn)MSHTML能夠有效解決這些問題。MSHTML是微軟公司的一個COM組件,該組件封裝了HTML語言中的所有元素及其屬性,通過其提供的標(biāo)準(zhǔn)接口,可以訪問指定網(wǎng)頁的所有元素。
MSHTML提供了豐富的HTML文檔接口,共包含IHTMLDocument、IHTMLDocument2、…、IHTMLDocument7等7種。其中,IHTMLDocument只有一個Script屬性,是管理頁面腳本用的;IHTMLDocument2接口跟C#的HtmlDocument類(即通過Web Browser控件直接獲得的Document屬性)很相似;IHTMLDocument3是跟Visual Basic 6.0里的文檔對象相似的一個接口,基本上可以用到的方法都在其中。MSHTML還提供封裝了對HTML元素完整操作的IHTMLElement接口,通過IHTMLElement,可以準(zhǔn)確地判斷HTML元素節(jié)點(diǎn)的類型,還可以獲取HTML元素節(jié)點(diǎn)的所有屬性。
1.2 二元檢查機(jī)制
通過對元素屬性值的比對,可以基本確定某個元素節(jié)點(diǎn)是否是要采集的節(jié)點(diǎn)。由于在網(wǎng)絡(luò)中網(wǎng)頁信息屬性值相同的元素節(jié)點(diǎn)比例很高,屬性值相同并不能唯一指定要采集的節(jié)點(diǎn),還需要其他約束條件。通過分析,發(fā)現(xiàn)MSHTML還提供了訪問當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)的功能,我們可以通過對父節(jié)點(diǎn)的回溯,取得該節(jié)點(diǎn)在HTML文檔樹中的路徑。這樣,同時比較網(wǎng)頁元素的屬性值和樹路徑值,就能夠精確判斷節(jié)點(diǎn)是否是需采集節(jié)點(diǎn)。
同時使用屬性值和樹路徑值進(jìn)行元素確認(rèn)的二元檢查機(jī)制,是作者的一項創(chuàng)新。這種技術(shù)不僅能夠極大提高采集節(jié)點(diǎn)的精確性,保證程序運(yùn)行的效果,而且由于在程序中使用了智能判斷語句,保證了程序的運(yùn)行效率,兼顧了用戶擁有良好的用戶體驗。
1.3主要功能設(shè)計
網(wǎng)頁信息表格化提取程序能夠?qū)崿F(xiàn)對網(wǎng)頁信息的可配置采集以及對信息進(jìn)行表格化處理并保存,程序主要分三大塊功能模塊:
1.網(wǎng)頁信息提取功能模塊。提供信息提取功能的主界面,輸入采集網(wǎng)址,采集頁數(shù)及啟動采集。
2.網(wǎng)頁元素解析功能模塊。將html代碼解析成網(wǎng)頁元素列表,并自動生成采集項的DOM樹路徑,以方便腳本的編寫。
3.采集配置管理功能模塊。用于管理采集配置,提供新增,編輯,刪除等功能。
3.程序的主要功能實現(xiàn)方法
3.1采集配置管理
采集配置信息使用數(shù)據(jù)庫保存,主要由一對主從表來記錄。主表記錄相應(yīng)網(wǎng)站采集配置的名稱、域名、翻頁設(shè)置、載入等待設(shè)置等信息。從表記錄采集項的名稱、網(wǎng)頁元素的ID、ClassName、TagName以及DOM樹路徑等信息。
3.2網(wǎng)頁元素解析
本功能的目標(biāo)主要是將網(wǎng)頁HTML代碼解析成HTML DOM網(wǎng)頁元素并列出其各個屬性值。通過對網(wǎng)頁元素的遍歷,找出所要采集的數(shù)據(jù)項和下一頁的網(wǎng)絡(luò)元素,將其記錄到采集配置表中,同時將采集項的DOM樹路徑自動記錄到配置表中。
3.2 網(wǎng)頁信息自動抽取
本功能將網(wǎng)頁中需要采集的數(shù)據(jù)項采集出來形成數(shù)據(jù)表,最后以XML文檔的形式保存。程序運(yùn)行原理如下:
Step1: 遍歷網(wǎng)頁中的所有元素,count變量記錄網(wǎng)頁元素的數(shù)量。
Step2: 將每個元素與采集配置中的采集項配置做比較確定該元素是否是要采集的元素。tab_item是一個adotable變量,它記錄了當(dāng)前頁面的采集配置,webbro.OleObject.document.all.item(i)變量是網(wǎng)頁元素,itembyscript()函數(shù)將判斷網(wǎng)頁元素是否需要采集。
Step3: 如果該元素是需要采集元素,進(jìn)一步判斷數(shù)據(jù)列緩存row里是否有該采集項的數(shù)據(jù)。如果沒有,將采集來的數(shù)據(jù)存入row中,如果有,通過addrec()函數(shù)將采集來的數(shù)據(jù)行存入XML文檔中。
4.運(yùn)行測試
4.1 讀取頁面
本例將采用廈門本地知名論壇小魚社區(qū)的一個帖子做測試。網(wǎng)頁中的html代碼將被解析成網(wǎng)頁元素列表在“元素”頁中顯示。
圖1 讀取頁面信息
4.2 配置采集
將操作界面切換至“元素”頁,可以看到網(wǎng)頁元素列表,在列表中找出需要采集的網(wǎng)頁元素。設(shè)置采集配置如下:
(1)翻頁。首先找到了“下一頁”鏈接的網(wǎng)頁元素,其tagname屬性值為“A”,innertext屬性值為“下一頁”。將其設(shè)為“下一頁”采集項。
(2)作者。其所屬網(wǎng)頁元素,classname屬性值為“readName b”,tagname屬性值為“DIV”。
(3)正文。其所屬網(wǎng)頁元素,classname屬性值為“tpc_content”,tagname屬性值為“DIV”。
(4)DOM樹路徑。通過網(wǎng)頁元素列表,自動生成DOM路徑。
4.3查看采集結(jié)果
圖2 表格化顯示采集結(jié)果
5.結(jié)語
隨著網(wǎng)絡(luò)化的快速發(fā)展,人們對網(wǎng)頁元素的需求越來越轉(zhuǎn)向個性化分類和精確提取,以往面向全部內(nèi)容的野蠻采集方式已經(jīng)無法滿足目前的需求,對其進(jìn)行針對性的研究有著積極意義。
網(wǎng)頁信息表格化提取程序通過網(wǎng)頁信息提取、網(wǎng)頁元素解析、采集配置管理三大功能模塊的分工協(xié)作,實現(xiàn)對網(wǎng)頁及其內(nèi)部關(guān)聯(lián)信息的提取、解析、整理和表格化顯示,不僅克服了以往網(wǎng)頁信息抓取工具不能提取內(nèi)部關(guān)聯(lián)網(wǎng)頁信息的不足,使得程序的適用性、擴(kuò)展性明顯提高,而且程序中創(chuàng)新使用的對網(wǎng)頁屬性值和樹路徑值進(jìn)行確認(rèn)的二元檢查機(jī)制,能夠?qū)崿F(xiàn)對指定信息的準(zhǔn)確提取,極大提升了程序結(jié)果的精確性。
雖然網(wǎng)頁信息表格化提取程序在精確性、適用性和擴(kuò)展性上取得了進(jìn)步,但也存在一些不足,希望以后能找到更好的解決方法。
1.某些操作界面的用戶自動化程序不足,操作較為繁瑣。
2.對海量數(shù)據(jù)的兼容性不足,處理效率低下。由于程序的獲取頁面采用WebBrowser技術(shù),導(dǎo)致采集效率較低,在處理大數(shù)據(jù)時會出現(xiàn)效率低下的問題,還需要尋找更好的技術(shù)方法進(jìn)行優(yōu)化。
參考文獻(xiàn):
[1]房勇,李銀勝.基于DOM狀態(tài)轉(zhuǎn)換的隱網(wǎng)頁信息抽取算法[J]. 計算機(jī)應(yīng)用與軟件,2015,(09):17-21.
[2]張建營,王嘉梅,湯雪,胡剛.彝文網(wǎng)頁信息采集技術(shù)研究[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014,(12):6-8.
[3]孫寶華.企業(yè)社會媒體主題信息提取算法研究[J].煤,2014,(01):72-76.
[4]金濤.網(wǎng)絡(luò)爬蟲在網(wǎng)頁信息提取中的應(yīng)用研究[J]. 現(xiàn)代計算機(jī)(專業(yè)版),2012,(01):16-18.
[5]朱志寧,黃青松. 快速的中文網(wǎng)頁分類方法實現(xiàn)[J]. 山西電子技術(shù),2008,(04):7-9.
[6]高軍,王騰蛟,楊冬青,唐世渭.基于Ontology的Web內(nèi)容二階段半自動提取方法[J]. 計算機(jī)學(xué)報,2004,(03):310-318.