對於一個網站管理員來說,最好的參考資料莫過於:網絡蜘蛛組織的主頁 http://www.robotstxt.org/ 相當精煉的FAQ會忙上您的忙。
此外一些著名的搜索引擎也會影響網絡蜘蛛技術的發展,常去其主頁上看看也是不錯的選擇。
————————————————————————————————————————————
網絡蜘蛛基本原理
網絡蜘蛛即Web Spider,是一個很形象的名字。把互聯網比喻成一個蜘蛛網,那麽Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是通過網頁的鏈接地址來尋找網頁,從網站某一個頁麵(通常是首頁或者sitemap.htm文件)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然後通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓取完為止。如果把整個互聯網當成一個網站,那麽網絡蜘蛛就可以用這個原理把互聯網上所有的網頁都抓取下來。
對於搜索引擎來說,要抓取互聯網上所有的網頁幾乎是不可能的,從目前公布的數據來看,容量最大的搜索引擎也不過是抓取了整個網頁數量的百分之四十左右。這其中的原因一方麵是抓取技術的瓶頸,無法遍曆所有的網頁,有許多網頁無法從其它網頁的鏈接中找到;另一個原因是存儲技術和處理技術的問題,如果按照每個頁麵的平均大小為20K計算(包含圖片),100億網頁的容量是100×2000G字節,即使能夠存儲,下載也存在問題(按照一台機器每秒下載20K計算,需要340台機器不停的下載一年時間,才能把所有網頁下載完畢)。同時,由於數據量太大,在提供搜索時也會有效率方麵的影響。因此,許多搜索引擎的網絡蜘蛛隻是抓取那些重要的網頁,而在抓取的時候評價重要性主要的依據是某個網頁的鏈接深度。
在抓取網頁的時候,網絡蜘蛛一般有兩種策略:廣度優先和深度優先。廣度優先是指網絡蜘蛛會先抓取起始網頁中鏈接的所有網頁,然後再選擇其中的一個鏈接網頁,繼續抓取在此網頁中鏈接的所有網頁。這是最常用的方式,因為這個方法可以讓網絡蜘蛛並行處理,提高其抓取速度。深度優先是指網絡蜘蛛會從起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之後再轉入下一個起始頁,繼續跟蹤鏈接。這個方法有個優點是網絡蜘蛛在設計的時候比較容易。
每個網絡蜘蛛都有自己的名字,在抓取網頁的時候,都會向網站標明自己的身份。網絡蜘蛛在抓取網頁的時候會發送一個請求,這個請求中就有一個字段為User-agent,用於標識此網絡蜘蛛的身份。例如Google網絡蜘蛛的標識為GoogleBot,Baidu網絡蜘蛛的標識為BaiDuSpider,Yahoo網絡蜘蛛的標識為Inktomi Slurp。如果在網站上有訪問日誌記錄,網站管理員就能知道,哪些搜索引擎的網絡蜘蛛過來過,什麽時候過來的,以及讀了多少數據等等。
絡蜘蛛進入一個網站,一般會訪問一個特殊的文本文件Robots.txt,這個文件一般放在網站服務器的根目錄下,如:
http://www.wenxuecity.com/robots.txt。網站管理員可以通過robots.txt來定義哪些目錄網絡蜘蛛不能訪問,或者哪些目錄對於某些特定的網絡蜘蛛不能訪問。例如有些網站的可執行文件目錄和臨時文件目錄不希望被搜索引擎搜索到,那麽網站管理員就可以把這些目錄定義為拒絕訪問目錄。Robots.txt語法很簡單,例如如果對目錄沒有任何限製,可以用以下兩行來描述:
User-agent: *
Disallow:
當然,Robots.txt隻是一個協議,如果網絡蜘蛛的設計者不遵循這個協議,網站管理員也無法阻止網絡蜘蛛對於某些頁麵的訪問,但一般的網絡蜘蛛都會遵循這些協議,而且網站管理員還可以通過其它方式來拒絕網絡蜘蛛對某些網頁的抓取。
網絡蜘蛛在下載網頁的時候,會去識別網頁的HTML代碼,在其代碼的部分,會有META標識。通過這些標識,可以告訴網絡蜘蛛本網頁是否需要被抓取,還可以告訴網絡蜘蛛本網頁中的鏈接是否需要被繼續跟蹤。例如: 表示本網頁不需要被抓取,但是網頁內的鏈接需要被跟蹤。
關於Robots.txt的語法和META Tag語法,查看文獻
Robots & Spiders & Crawlers: How web and intranet search engines follow links to build indexes. Author: Avi Rapports.2001.
現在一般的網站都希望搜索引擎能更全麵的抓取自己網站的網頁,因為這樣可以讓更多的訪問者能通過搜索引擎找到此網站。為了讓本網站的網頁更全麵被抓取到,網站管理員可以建立一個網站地圖,即Site Map。許多網絡蜘蛛會把sitemap.htm文件作為一個網站網頁爬取的入口,網站管理員可以把網站內部所有網頁的鏈接放在這個文件裏麵,那麽網絡蜘蛛可以很方便的把整個網站抓取下來,避免遺漏某些網頁,也會減小對網站服務器的負擔。
內容提取
搜索引擎建立網頁索引,處理的對象是文本文件。對於網絡蜘蛛來說,抓取下來網頁包括各種格式,包括html、圖片、doc、pdf、多媒體、動態網頁及其它格式等。這些文件抓取下來後,需要把這些文件中的文本信息提取出來。準確提取這些文檔的信息,一方麵對搜索引擎的搜索準確性有重要作用,另一方麵對於網絡蜘蛛正確跟蹤其它鏈接有一定影響。
對於doc、pdf等文檔,這種由專業廠商提供的軟件生成的文檔,廠商都會提供相應的文本提取接口。網絡蜘蛛隻需要調用這些插件的接口,就可以輕鬆的提取文檔中的文本信息和文件其它相關的信息。
HTML等文檔不一樣,HTML有一套自己的語法,通過不同的命令標識符來表示不同的字體、顏色、位置等版式,如:、、等,提取文本信息時需要把這些標識符都過濾掉。
動態網頁一直是網絡蜘蛛麵臨的難題。所謂動態網頁,是相對於靜態網頁而言,是由程序自動生成的頁麵,這樣的好處是可以快速統一更改網頁風格,也可以減少網頁所占服務器的空間,但同樣給網絡蜘蛛的抓取帶來一些麻煩。由於開發語言不斷的增多,動態網頁的類型也越來越多,如:asp、jsp、php等。這些類型的網頁對於網絡蜘蛛來說,可能還稍微容易一些。網絡蜘蛛比較難於處理的是一些腳本語言(如VBScript和JavaScript)生成的網頁,如果要完善的處理好這些網頁,網絡蜘蛛需要有自己的腳本解釋程序。對於許多數據是放在數據庫的網站,需要通過本網站的數據庫搜索才能獲得信息,這些給網絡蜘蛛的抓取帶來很大的困難。對於這類網站,如果網站設計者希望這些數據能被搜索引擎搜索,則需要提供一種可以遍曆整個數據庫內容的方法。