廣州工商學院電子信息工程系 何小明
通用爬蟲雖已發展多年,技術較為成熟,但僅可采集到具有統一資源定位符(URL)的淺層網頁(Surface Web)。隨著Web技術的快速發展,越來越多的網頁將其數據與業務進行物理分離,僅提供限制性的數據訪問接口,使其具有商業價值的數據隱藏到深層網頁(Deep Web)背后的網絡數據庫中。目前,很多爬蟲研究者試圖設計一個能采集全部深層網頁數據的通用爬蟲,由于不同深層網頁數據加載方式的不同,使得這類深層網頁通用爬蟲只能采集有限深層網頁的數據。為了獲得特定主題內容或特定領域的深層網頁數據,還需定制開發出專門的深層網頁垂直爬蟲。
深層網頁垂直爬蟲是根據深層網頁的垂直結構而定制的一個自動提取數據的程序,通過采集深層網頁的數據塊來分析出用戶需要的數據實體。
深層網頁垂直爬蟲以查詢接口或網站導航頁面為入口,結合相應的操作策略,通過網頁腳本、異步請求、交互操作或頁面渲染等動態網頁技術加載出完整的深層網頁,定位并提取網頁頁面包含的數據塊,再分析出數據實體,并評估采集到的數據是否完備,若未完備,則不斷重復該過程,直到數據采集完備,結束爬蟲程序的運行。其運行流程如圖1所示。在這個過程中,可根據數據實體的分析結果優化爬蟲的運行策略,以便反饋與指導后續的工作。

圖1 深層網頁垂直爬蟲運行流程示意圖
(1)如何加載出完整的深層網頁;
(2)如何定位并抽取網頁數據塊;
(3)如何分析出數據實體。
深層網頁的完整加載決定數據采集的完整性,也是深層網頁垂直爬蟲定位、抽取網頁數據塊和分析數據實體的基礎。網頁數據塊的定位與抽取是爬蟲采集數據的關鍵步驟,分析數據實體的方法依賴于所抽取數據塊的結構與特征。整個深層網頁垂直爬蟲的運行策略就是在這三個關鍵技術上建立的,下面將介紹深層網頁垂直爬蟲的關鍵技術及其爬取策略。
通過超文本傳輸協議(HTTP),深層網頁垂直爬蟲從URL處僅可加載出深層網頁的靜態內容,需結合交互操作、網頁腳本、異步請求或頁面渲染等動態網頁技術,將深層網頁內容完整加載。
交互操作是用戶對網頁元素實施的可加載出深層網頁動態內容的操作。常見的交互操作有按鍵或超鏈接的點擊、文本框的輸入與表單的提交[1]、頁面或元素的滑動等。網頁腳本是為提高Web系統的響應速度而設計的解釋性程序,具有跨平臺執行的特點,常用于數據驗證、多媒體加載與播放、網頁元素的事件處理等操作。異步請求[2]是為提高網頁交互的流暢性而設計的多線程處理機制,在實際的應用中還具有隱藏數據請求接口、保護重要數據的作用。網頁的頁面渲染因無法脫離瀏覽器程序的支持,正逐漸成為一種有效的反爬蟲技術。深層網頁垂直爬蟲通常采用集成瀏覽器內核的方式來解決網頁渲染的限制,常見的瀏覽器內核有Mozilla Gecko內核、IE內核和開源內核。
深層網頁可視為網絡數據庫的一種視圖。由于網頁設計風格的不同,網頁上的數據已丟失了其存儲于數據庫中時所具有的數據結構,數據實體被拆分與組合成許多數據塊,分布在一個或多個深層網頁中。深層網頁垂直爬蟲需利用基于DOM樹[3]、基于頁面定位語言或基于CSS選擇器的工具定位出深層網頁上的數據塊,并通過程序自動化或半自動化地抽取出這些數據塊。
用戶對數據需求的不同,決定數據來源的不同。針對某一數據實體,有的只需采集特定網頁下的數據塊,有的則需從同領域下不同的深層網頁中采集多個數據塊。這樣從多網頁下采集到的多個數據塊包含的信息具有片面性且相互之間存在冗余,需將數據塊進行分析以提煉出完整的數據實體,所涉及到的分析算法包括頁面分類、數據源采樣、數據塊標注、數據塊相似性度量和數據源整合。
導入環節:教師可請學生打一諺語:形容在一個地方兩個強者不能相容。在熱烈的氣氛中,學生齊聲說出答案“一山不容二虎”。隨后,教師進一步拋疑:是什么原因?學生甲說:“是由于食物不充足導致。”學生乙說:“是由于能量供應出了問題。”教師可留出懸念,在上完新課后再評價。
2.3.1 頁面分類
深層網頁垂直爬蟲在運行的過程中,對查詢接口頁面、導航頁面、索引頁面和數據頁面等不同類別的網頁分別采取不同的處理方式,故需對這些頁面進行分類。文獻[4]將深層網頁標簽名稱、文本值和默認值等作為語義特征進行提取,通過決策樹分類算法生成數據源的分類規則樹。文獻[5]采用C4.5決策樹和樸素貝葉斯相結合的分類方法,并結合反饋機制,能有效地判斷爬蟲提取的網頁信息是否與主題相關。
2.3.2 數據源采樣
同領域下不同深層網頁數據源質量的高低會直接影響深層網頁垂直爬蟲獲取數據實體的效率,這就需要對多個數據源進行質量評估。由于數據源包含的數據量太大,難以對所有數據進行評估,在實際操作中,通常用數據源采樣算法來降低數據評估的運算量。常用的數據源采樣算法可分為挖掘采樣算法和隨機采樣算法。挖掘采樣算法是通過Web系統的日志模塊來挖掘關鍵詞與數據屬性的關聯性,從該日志模塊中提取出Web系統的高頻關鍵詞來完成數據源的采樣[6]。由于日志模塊通常無法被爬蟲訪問,導致該類采樣算法的實用性較低。隨機采樣算法是根據文本頻率、集合詞頻和平均詞頻等統計量來對數據源進行隨機采樣,可有效地描述數據庫內容。
2.3.3 數據塊標注
對于同一數據實體,深層網頁垂直爬蟲從同領域下不同深層網頁中采集到的數據塊存在多種表述,需對數據塊進行標注,歸一化的標注描述便于爬蟲對數據塊進一步分析。常用的數據標注方法有基于頁面信息的數據標注算法、基于領域知識的數據標注算法、基于接口模式的數據標注算法和基于結果模式的數據標注算法等。基于頁面信息的數據標注算法依賴于數據塊所在網頁的標簽結構。由于深層網頁設計風格的多樣化,使得網頁標簽的結構存在多樣性,因此該標注算法的實用性較低。基于領域知識的數據標注算法是通過構造相關領域的對象知識模型,利用機器學習算法對數據塊進行標注。基于接口模式的數據標注算法和基于結果模式的數據標注算法分別依賴數據查詢接口頁面和查詢結果頁面的數據屬性,對同一領域內的深層網頁的數據塊可實現準確的標注[7]。
2.3.4 數據塊相似性度量
數據塊之間的相似性度量用于識別數據塊之間是否存在冗余或互補屬性,從而提取出信息完善的數據實體。數據塊之間的相似性度量方法可分為基于文本、結構和語義的相似性度量。基于文本相似性度量算法是對數據塊的文本進行相似性計算。基于結構相似性度量算法是計算數據塊所在網頁的標簽結構的相似性。基于語義相似性度量算法是從網頁的文本提取出語義詞匯,通過計算語義詞匯的相似度得到數據塊的相似性。上述每種數據塊相似性度量算法都有各自的特點,實際應用時可結合多種度量算法來提高數據相似性的精度。
2.3.5 數據源整合
若同領域下不同的深層網頁提供較高相似度的數據塊,則可對這些深層網頁的數據源進行整合。數據源整合通常要結合網頁頁面的結構特征和數據塊的語義特征,采用聚類算法或混合特征的方法來完善數據實體,從而實現數據源的整合。文獻[8]通過計算不同數據源的數據塊屬性的相似性,判別出數據塊間的共有屬性和私有屬性,通過組合每個數據實體的共有屬性和私有屬性來完成多個數據源的整合。
深層網絡垂直爬蟲的數據入口可分為基于關鍵詞查詢接口和基于導航分類頁面的接口。針對單一領域的深層網頁,如電商、社交領域,深層網頁垂直爬蟲通常以導航分類頁面為入口,動態地加載出所有的深層網頁。基于關鍵詞查詢接口的爬取策略則是深層網絡垂直爬蟲的主要研究方向,下面重點介紹基于關鍵詞查詢接口的爬取策略。
對于以表單作為數據入口的深層網頁,通常以詞典、統計表等基于領域的本體知識庫作為關鍵詞篩選策略。爬蟲程序先構建一個關鍵詞詞庫,詞庫在關鍵詞篩選策略下動態地變動,爬蟲加載出詞庫中全部關鍵字對應的深層網頁;網頁經過分類處理后,爬蟲再對分類出的查詢結果網頁進行數據塊的定位、抽取和相似性度量,提煉出完整的數據實體,最后將數據實體進行持久化存儲;當關鍵詞所關聯的數據實體被持久化存儲后,該關鍵詞將被移出詞庫,重復上述過程直至詞庫為空,爬蟲程序停止工作。
從互聯網技術的發展與應用前景來看,深層網頁垂直爬蟲將成為采集海量數據的重要工具之一,其技術仍處于待完善的階段,有很多值得我們深入研究與探討的課題,如下:
(1)多媒體信息的采集。多媒體數據包含豐富的信息,當前爬蟲程序主要采集的數據對象是文本信息,極少去采集多媒體數據本身并進行分析。
(2)反爬蟲的干擾。深層網頁垂直爬蟲面臨的另一個挑戰就是反爬蟲。反爬蟲以保護網頁數據、避免爬蟲過度占用網絡帶寬為目的來阻止爬蟲的運作,爬蟲則需采取相應的策略來應對該限制。爬蟲與反爬蟲之間的這種技術較量,降低了爬蟲程序的生命周期,給爬蟲開發者帶來了極大的技術挑戰。
(3)數據價值的挖掘。深層網頁垂直爬蟲是一種采集數據的工具,其數據的應用價值并未完全體現。目前,大數據、數據挖掘、人工智能、深度學習等技術研究正如火如荼地展開著,這些研究工作都需以海量數據作支撐,而這正是爬蟲所能提供的。
除了上述三方面的困難與挑戰,深層網頁垂直爬蟲技術還有很多需要我們改進與完善的方面,這也是我們今后的主要研究內容。希望通過更多研究人員的努力,建立起一個更高效、更智能的深層網頁垂直爬蟲。