?
?
?
對于搜索引擎來說,網絡蜘蛛是最底層的原料提供者。對網絡蜘蛛的需求主要來自索引器。
索引器一般為全文索引器,它并不能干預網絡蜘蛛的行為. 因此,網絡蜘蛛必須可以自動不停地運行。
索引器要求網絡蜘蛛爬取并保存一定字符集范圍內的文本文件。保存形式可以是一個大文件也可以是文件夾或數據庫。同時,由于互聯網是一個全天候開放的系統,網絡上的資源隨時都有可能已被更新。網絡蜘蛛要盡量做到下載的網頁保持最新版本,這樣才可以獲得有實效性的信息。綜上所述,網絡蜘蛛的功能可以概括.為以下兩點[1]:
(1)不需干預的自動爬取網頁;(2)以文本形式保存網頁內容,并對其進行定期更URL SeⅣer是對URL隊列及其相關操作的一個封裝,為工作線程提供無重復的URL。URL senrer在內部維護著多個隊列用于存儲有狀態和優先級的URL,這樣來避免URL的重復爬取和實現URL的優先爬取策略。
?
頁面存儲模塊的功能比較簡單,它為工作線程提供文件存儲服務。它將線程請求到的H吼L字符序列存儲到本地文件或數據庫。
線程池是一種線程組織管理方法。由于線程的創建將消耗一定的系統資源,所以為每一個URL創建一個線程并不現實。一個好的解決方法就是使用線程池。
線程池只創建一定數量的工作線程在線程池中等待,當有任務時,工作線程便開始運行,否則它們一直等當線程從URL SeⅣer獲取到URL后,它將發送一個HrI『I:P請求來獲取URL所指向的網頁。獲取成功后對網頁代碼進行解析,從中提取更多的URL并發往URL Senrer作為以后繼續爬取的目標。網頁被解析完后,將被頁面存儲模塊存儲。整個過程及URL在URLSeⅣer中的相應狀態如 網絡蜘蛛提供的最終結果是網頁。網頁被請求、保存到本地后,并不能就置之不理了。假設索引器為一個網頁索引之后提取了一個關鍵字,用戶通過搜索這個關鍵字得到了這個網頁的URL,當用戶瀏覽這個URL指向的頁面時,如果這個頁面已經改變了,那么本次搜索對用戶來說就是無效的。用戶最終從搜索引擎得到的不是網頁,而是指向網頁的URL,網頁始終保持在它本來所在的Web服務器中。因此,搜索引擎要保證頁面庫中的網頁與Web服務器上的網頁一致。
網絡蜘蛛第一次處理一個URL時,會將網頁保存到本地,之后定期對其進行重復請求,來檢查網頁是否是最新的,如果不是則下載。這個請求與第一次請求是有區別的。后面的請求只請求網頁的頭信息,根據頭信息中的最后更改日期字段值來判斷網頁的狀態。
設定重復請求的周期并不是一個簡單的問題。最理想的情況是周期非常小,實現實時更新。但如果設定太短,則網絡蜘蛛將花費很多時間更新已下載的網頁,這樣就減少了網絡蜘蛛請求新網頁的時間,影響搜索引擎優化的查全率。此外,互聯網上的網頁并不是都會更新,很多網頁從不更新,也有的網頁很少更新或很頻繁更新。因此,更新也應有優先級。重要的經常更新的網頁,更新周期要短,不重要的不經常更新的網頁,更新周期要長。所以,網頁的更新周期要有針對性的設定。
關鍵是對其更新周期的判斷,可以使用基于經驗的方法:當一個網頁被兩次重復請求后仍然未更新,則第三次可以增加周期的長度;當幾次重復請求后都發現被更新時,可以縮短周期。
(編輯:小酷)