[摘要]隨著互聯網和寬帶上網的普及,搜索引擎在中國異軍突起,并日益滲透到人們的日常生活中。在互聯網普及之前,人們查閱資料首先想到的是擁有大量書籍資料的圖書館,但是今天很多人都會選擇一種更方便、快捷、全面、準確的查閱方式互聯網。但是搜索引擎也得有一個自己的‘書庫,這個‘書庫是如何獲得的呢?那就需要網絡爬蟲了,它可以從互聯網上搜取各式各樣的信息,組成搜索引擎的資料庫,以便用戶查詢。
[關鍵詞]搜索引擎,網絡爬蟲,信息抓取
中圖分類號:TP-9文獻標識碼:A文章編號:1671-7597(2009)0810066-01
互聯網搜索引擎通常由5個主要環節構成。系統主要模塊包括網頁信息抓取、網頁內容分析、網頁索引建立、網頁結果排序、網頁搜索工具與接口。主要功能模塊結合其他中文信息處理和信息檢索技術,完成整個網頁搜索引擎。其中網絡信息抓取需要網絡爬蟲來完成,網絡爬蟲在搜索引擎中起著至關重要的作用,它是搜索引擎信息來源的核心。
網絡爬蟲功能需求主要是完成信息抓取,其他功能設計都圍繞信息抓取這個核心功能進行。網絡爬蟲的設計開發總體上包括5方面任務要求。具體的內容描述如下:
1.網絡爬蟲具有可配置性。它需要動態配置信息,設定待抓取URL地址列表、抓取深度和層次范圍。網絡爬蟲需要行為控制信息,包括抓取使用的線程或進程情況、時間間隔和更新周期。
2.新網站和新鏈接的發現能力。網絡爬蟲需要簡單分析下載的頁面,提取包含的新URL。新增加的URL增加到等待下載隊列,保證網絡爬蟲的自我資源發現能力。
3.下載頁面的存儲和管理。網絡爬蟲存儲下載的網頁內容,為網頁分析和索引提供數據。海量搜索引擎下載的文檔數量驚人,需要合理的管理策略。存儲的高效和可靠性至關重要,需要考慮分布式存儲策略。
4.高效的網頁更新、死鎖判別方法。網絡爬蟲對歷史下載的網頁需要定期檢查,判斷頁面內容是否更換,確定網頁源是否已經被刪除。這部分功能需要網絡爬蟲通過多線程并發控制,控制對同一站點的訪問并發數量和檢查周期。
5.域名解析緩存機制和已下載內容的本地代理緩存。網絡爬蟲需要經常訪問同一個域名下的網頁內容。域名解析內容緩存能存儲域名與IP地址的復雜對應關系,減少域名查詢次數,大大提高網絡利用率。本地下載代理內容可以避免重復下載減少一定時期內對目標站點的多次下載。
從結構上來看,互聯網其實就是一張大型的網絡圖。搜索引擎中可以把每一個網頁作為一個節點,把網頁內的超鏈接當作連接網頁的弧。搜索引擎在進行信息抓取時,可以按照圖論的相關算法進行處理。網絡爬蟲從某個網站的首頁進入,按照圖論的相關遍歷算法就可以訪問這個網站的所有信息。
為了實現網絡爬蟲,需要對HTTP協議有所了解。HTTP協議是用于從互聯網WWW服務器傳送超文本到本地瀏覽器的傳送協議。協議的目標是使瀏覽器更加高效,提高網絡傳輸效率。HTTP協議不僅可以正確、快速的傳輸超文本文檔,還可以確定傳輸文檔中的哪一部分首先顯示。
為了更快的實現抓取,可以采用封裝的HTTP協議API,也可以采用最基本的Socket通信編程模式。Socket就是所謂的網絡套接字。
互聯網上分布著大量網頁,不同網頁的訪問速度差別比較大。網頁下載過程中的網絡延遲成為整個系統性能的瓶頸。為了提高效率,網絡爬蟲被設計成隊列緩沖、多線程并行結構。網絡爬蟲具有3大模塊:HTTP下載模塊、鏈接分析模塊、和下載控制模塊。3大模塊有機的組成一個高效的功能體系。各模塊的作用如下:
·HTTP下載模塊利用HTTP網絡協議下載,獲取并存儲網頁內容。
·鏈接分析模塊能夠提取網頁內的超鏈接用來獲取后續網頁入口。
·下載控制模塊控制網頁訪問次序、更新策略、訪問隊列調度等工作。
網絡爬蟲訪問一個網站,需要從已知的入口頁面開始。這個入口頁面往往是網站的首頁或者sitemap頁面。從這個頁面通過鏈接分析,尋找并訪問后續頁面地址。
互聯網的鏈接結構是一個典型的網狀結構。在這個訪問過程中需要遵循一系列的算法。通常,網絡爬蟲對網站的訪問有訪問深度限制,一般在3~5層。遍歷策略多用數據結構中典型的算法:廣度優先和深度優先。
從應用角度來看,廣度優先能盡快地比較平均的獲取不同網站的內容,比較適合于大型搜索系統初期網頁庫的建立;深度優先在設計的時候比較容易,對垂直搜索或者站內搜索比較合適。
Java提供了多個訪問各種標準Internet的協議類庫,網絡爬蟲可以直接用Java的網絡開發包java.net.*函數調用來完成。
網絡爬蟲的設計思路是先確定需要下載的網頁URL,指定通信端口,創建一個用于網絡通信的Socket對象。結果通過流失輸出接口輸出,創建相應的輸出對象。通過輸入接口,向Socket對象傳入HTTP下載請求。遠端的目標Web服務器得到請求后,發送應答消息。本地Socket對象收到消息后緩存并輸出,就完成了整個網頁下載過程。傳輸過程中使用默認的HTTP協議進行。
網絡爬蟲的設計流程中,核心部分是獲取等待下載的URL列表、創建下載的客戶端、獲取并存儲得到的網頁結果。
大型搜索引擎系統需要抓取海量信息數據。為了有效的提高網絡爬蟲的性能和效率,并滿足系統數據下載需求,網絡爬蟲的設計通常包含以下一系列優化策略和原則:
·對等待下載的URL進行重排,避免重復下載。
·增加多個工作隊列,提高系統并發能力。工作隊列主要有4類:等待隊列、處理隊列、成功隊列、失敗隊列。
·利用網頁proxy緩沖,檢查是否需要從遠程下載,減少不必要的傳輸。
·同一站點的URL盡量映射到同一個線程處理,避免同時訪問給被訪問站點帶來負擔。
參考文獻:
[1]盧亮、張博文著,《搜索引擎原理、實踐與應用》,電子工業出版社,2007,9.
[2]Jennifer Grappone,Gradiva Couzin著,楊明軍譯,《搜索引擎優化》,清華大學出版社,2007,7.
[3]李剛、宋偉、邱群著,《Ajax+Lucene構建搜索引擎》,人民郵電出版社,2006.
[4]Margaret H.Dunham著,郭崇惠、田風占、靳曉明譯,《數據挖掘教程》,清華大學出版社,2005,5.
作者簡介:
楊松梅(1960-),吉林省四平市人,副教授,就職于長春市司法局培訓中心。