随着搜索經濟的崛起,人們開始越加關注全球各大搜索引擎的性能(néng)、技(jì )術和日流量。作(zuò)為(wèi)企業,會根據搜索引擎的知名(míng)度以及日流量來選擇是否要投放廣告等;作(zuò)為(wèi)普通網民(mín),會根據搜索引擎的性能(néng)和技(jì )術來選擇自己喜歡的引擎查找資料;作(zuò)為(wèi)學(xué)者,會把有(yǒu)代表性的搜索引擎作(zuò)為(wèi)研究對象……
而作(zuò)為(wèi)一個網站的經營者,其更關心的或許是如何通過網絡載體(tǐ)讓更多(duō)的網民(mín)知道自己的網站,進而獲得更高的流量和知名(míng)度。這其中(zhōng),搜索引擎已經成了一個重要的且是免費的宣傳途徑。一方面,搜索引擎會主動出擊,尋找網絡上的各種網頁(yè)數據,并在後台按相關條件進行索引;另一方面,各大網站為(wèi)了能(néng)讓自己的内容更多(duō)的通過搜索引擎向網民(mín)展示,都開始對網站結構進行重大調整,其中(zhōng)包括扁平化結構設計、動态(網頁(yè))轉靜态(網頁(yè))、Sitemap等。
這些看來不經意的舉動都讓我們切身感受到搜索引擎對我們網絡使用(yòng)方式的改變起到了重要作(zuò)用(yòng)。并且,正因為(wèi)搜索引擎的興起以及社會各界對其重視程度日漸高漲,還由此創造了一個全新(xīn)的職位——SEO。實際上,搜索引擎經濟的崛起,又(yòu)一次向人們證明了網絡所蘊藏的巨大商(shāng)機。網絡離開了搜索将隻剩下空洞雜亂的數據,以及大量等待去費力挖掘的金礦。
搜索引擎一直專注于提升用(yòng)戶的體(tǐ)驗度,其用(yòng)戶體(tǐ)驗度則反映在三個方面: 準、全、快 。用(yòng)專業術語講是:查準率、查全率和搜索速度(即搜索耗時)。其中(zhōng)最易達到的是搜索速度,因為(wèi)對于搜索耗時在1秒(miǎo)以下的系統來說,訪問者很(hěn)難辨别其快慢了,更何況還有(yǒu)網絡速度的影響。因此,對搜索引擎的評價就集中(zhōng)在了前兩者:準、全。中(zhōng)文(wén)搜索引擎的“準”,需要保證搜索的前幾十條結果都和搜索詞十分(fēn)相關,這需由“ 分(fēn)詞技(jì )術 ”和“ 排序技(jì )術 ”來決定;中(zhōng)文(wén)搜索引擎的“全”則需保證不遺漏某些重要的結果,而且能(néng)找到最新(xīn)的網頁(yè),這需要搜索引擎有(yǒu)一個強大的網頁(yè)收集器,一般稱為(wèi)“網絡蜘蛛”,也有(yǒu)叫“網頁(yè)機器人”。
研究搜索引擎技(jì )術的文(wén)章不少,但大部分(fēn)讨論的是如何評價網頁(yè)的重要性,對于網絡蜘蛛研究的文(wén)章不多(duō)。網絡蜘蛛技(jì )術并不是一項十分(fēn)高深的技(jì )術,但要做一個強大的網絡蜘蛛,卻非易事。在目前磁盤容量已經不是瓶頸的時候,搜索引擎一直在擴大自己的網頁(yè)數量。最大的搜索引擎Google( http://www.google.com )從2002年的10億網頁(yè)增加到現在近40億網頁(yè);最近雅虎搜索引擎( http://search.yahoo.com/ )号稱收錄了45億個網頁(yè);國(guó)内的中(zhōng)文(wén)搜索引擎百度( http://www.baidu.com )的中(zhōng)文(wén)頁(yè)面從兩年前的七千萬頁(yè)增加到了現在的兩億多(duō)。據估計,整個互聯網的網頁(yè)數達到100多(duō)億,而且每年還在快速增長(cháng)。因此一個優秀的搜索引擎,需要不斷的優化網絡蜘蛛的算法,提升其性能(néng)。
或許有(yǒu)些人有(yǒu)疑問,為(wèi)何搜索引擎需要用(yòng)網絡蜘蛛抓取網站所有(yǒu)的網頁(yè),為(wèi)什麽不在搜索者輸入關鍵詞後隻把那些需要的結果抓取過來?這實際上是效率問題,搜索引擎不可(kě)能(néng)在搜索時實時去檢查每個網頁(yè),而是需要把網頁(yè)先抓取下來,按照關鍵詞建立好索引,每次搜索的結果都會直接從搜索引擎建立好索引的數據庫中(zhōng)查找,然後把結果返回給訪問者。 關于搜索引擎系統架構方面的知識, 本文(wén)主要介紹網絡蜘蛛的相關技(jì )術。
網絡蜘蛛基本原理(lǐ)
網絡蜘蛛即Web Spider,是一個很(hěn)形象的名(míng)字。把互聯網比喻成一個蜘蛛網,那麽Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是通過網頁(yè)的鏈接地址來尋找網頁(yè),從網站某一個頁(yè)面(通常是首頁(yè))開始,讀取網頁(yè)的内容,找到在網頁(yè)中(zhōng)的其它鏈接地址,然後通過這些鏈接地址尋找下一個網頁(yè),這樣一直循環下去,直到把這個網站所有(yǒu)的網頁(yè)都抓取完為(wèi)止。如果把整個互聯網當成一個網站,那麽網絡蜘蛛就可(kě)以用(yòng)這個原理(lǐ)把互聯網上所有(yǒu)的網頁(yè)都抓取下來。
對于搜索引擎來說,要抓取互聯網上所有(yǒu)的網頁(yè)幾乎是不可(kě)能(néng)的,從目前公(gōng)布的數據來看,容量最大的搜索引擎也不過是抓取了整個網頁(yè)數量的百分(fēn)之四十左右。這其中(zhōng)的原因一方面是抓取技(jì )術的瓶頸,無法遍曆所有(yǒu)的網頁(yè),有(yǒu)許多(duō)網頁(yè)無法從其它網頁(yè)的鏈接中(zhōng)找到;另一個原因是存儲技(jì )術和處理(lǐ)技(jì )術的問題,如果按照每個頁(yè)面的平均大小(xiǎo)為(wèi)20K計算(包含圖片),100億網頁(yè)的容量是100×2000G字節,即使能(néng)夠存儲,下載也存在問題(按照一台機器每秒(miǎo)下載20K計算,需要340台機器不停的下載一年時間,才能(néng)把所有(yǒu)網頁(yè)下載完畢)。同時,由于數據量太大,在提供搜索時也會有(yǒu)效率方面的影響。因此,許多(duō)搜索引擎的網絡蜘蛛隻是抓取那些重要的網頁(yè),而在抓取的時候評價重要性主要的依據是某個網頁(yè)的鏈接深度。
在抓取網頁(yè)的時候,網絡蜘蛛一般有(yǒu)兩種策略:廣度優先和深度優先(如下圖所示)。廣度優先是指網絡蜘蛛會先抓取起始網頁(yè)中(zhōng)鏈接的所有(yǒu)網頁(yè),然後再選擇其中(zhōng)的一個鏈接網頁(yè),繼續抓取在此網頁(yè)中(zhōng)鏈接的所有(yǒu)網頁(yè)。這是最常用(yòng)的方式,因為(wèi)這個方法可(kě)以讓網絡蜘蛛并行處理(lǐ),提高其抓取速度。深度優先是指網絡蜘蛛會從起始頁(yè)開始,一個鏈接一個鏈接跟蹤下去,處理(lǐ)完這條線(xiàn)路之後再轉入下一個起始頁(yè),繼續跟蹤鏈接。這個方法有(yǒu)個優點是網絡蜘蛛在設計的時候比較容易。兩種策略的區(qū)别,下圖的說明會更加明确。

由于不可(kě)能(néng)抓取所有(yǒu)的網頁(yè),有(yǒu)些網絡蜘蛛對一些不太重要的網站,設置了訪問的層數。例如,在上圖中(zhōng),A為(wèi)起始網頁(yè),屬于0層,B、C、D、E、F屬于第1層,G、H屬于第2層,I屬于第3層。如果網絡蜘蛛設置的訪問層數為(wèi)2的話,網頁(yè)I是不會被訪問到的。這也讓有(yǒu)些網站上一部分(fēn)網頁(yè)能(néng)夠在搜索引擎上搜索到,另外一部分(fēn)不能(néng)被搜索到。 對于網站設計者來說,扁平化的網站結構設計有(yǒu)助于搜索引擎抓取其更多(duō)的網頁(yè)。
網絡蜘蛛在訪問網站網頁(yè)的時候,經常會遇到加密數據和網頁(yè)權限的問題,有(yǒu)些網頁(yè)是需要會員權限才能(néng)訪問。當然,網站的所有(yǒu)者可(kě)以通過協議讓網絡蜘蛛不去抓取(下小(xiǎo)節會介紹),但對于一些出售報告的網站,他(tā)們希望搜索引擎能(néng)搜索到他(tā)們的報告,但又(yòu)不能(néng)完全免費的讓搜索者查看,這樣就需要給網絡蜘蛛提供相應的用(yòng)戶名(míng)和密碼。網絡蜘蛛可(kě)以通過所給的權限對這些網頁(yè)進行網頁(yè)抓取,從而提供搜索。而當搜索者點擊查看該網頁(yè)的時候,同樣需要搜索者提供相應的權限驗證。
網站與網絡蜘蛛
網絡蜘蛛需要抓取網頁(yè),不同于一般的訪問,如果控制不好,則會引起網站服務(wù)器負擔過重。今年4月,淘寶網( http://www.taobao.com )就因為(wèi)雅虎搜索引擎的網絡蜘蛛抓取其數據引起淘寶網服務(wù)器的不穩定。網站是否就無法和網絡蜘蛛交流呢(ne)?其實不然,有(yǒu)多(duō)種方法可(kě)以讓網站和網絡蜘蛛進行交流。一方面讓網站管理(lǐ)員了解網絡蜘蛛都來自哪兒,做了些什麽,另一方面也告訴網絡蜘蛛哪些網頁(yè)不應該抓取,哪些網頁(yè)應該更新(xīn)。
每個網絡蜘蛛都有(yǒu)自己的名(míng)字,在抓取網頁(yè)的時候,都會向網站标明自己的身份。網絡蜘蛛在抓取網頁(yè)的時候會發送一個請求,這個請求中(zhōng)就有(yǒu)一個字段為(wèi)User-agent,用(yòng)于标識此網絡蜘蛛的身份。例如Google網絡蜘蛛的标識為(wèi)GoogleBot,Baidu網絡蜘蛛的标識為(wèi)BaiDuSpider,Yahoo網絡蜘蛛的标識為(wèi)Inktomi Slurp。如果在網站上有(yǒu)訪問日志(zhì)記錄,網站管理(lǐ)員就能(néng)知道,哪些搜索引擎的網絡蜘蛛過來過,什麽時候過來的,以及讀了多(duō)少數據等等。如果網站管理(lǐ)員發現某個蜘蛛有(yǒu)問題,就通過其标識來和其所有(yǒu)者聯系。下面是博客中(zhōng)國(guó)( http://www.blogchina.com )2004年5月15日的搜索引擎訪問日志(zhì):
 網絡蜘蛛進入一個網站,一般會訪問一個特殊的文(wén)本文(wén)件Robots.txt,這個文(wén)件一般放在網站服務(wù)器的根目錄下,如: http://www.blogchina.com/robots.txt 。網站管理(lǐ)員可(kě)以通過robots.txt來定義哪些目錄網絡蜘蛛不能(néng)訪問,或者哪些目錄對于某些特定的網絡蜘蛛不能(néng)訪問。例如有(yǒu)些網站的可(kě)執行文(wén)件目錄和臨時文(wén)件目錄不希望被搜索引擎搜索到,那麽網站管理(lǐ)員就可(kě)以把這些目錄定義為(wèi)拒絕訪問目錄。Robots.txt語法很(hěn)簡單,例如如果對目錄沒有(yǒu)任何限制,可(kě)以用(yòng)以下兩行來描述: User-agent: * Disallow:
當然,Robots.txt隻是一個協議,如果網絡蜘蛛的設計者不遵循這個協議,網站管理(lǐ)員也無法阻止網絡蜘蛛對于某些頁(yè)面的訪問,但一般的網絡蜘蛛都會遵循這些協議,而且網站管理(lǐ)員還可(kě)以通過其它方式來拒絕網絡蜘蛛對某些網頁(yè)的抓取。
網絡蜘蛛在下載網頁(yè)的時候,會去識别網頁(yè)的HTML代碼,在其代碼的部分(fēn),會有(yǒu)META标識。通過這些标識,可(kě)以告訴網絡蜘蛛本網頁(yè)是否需要被抓取,還可(kě)以告訴網絡蜘蛛本網頁(yè)中(zhōng)的鏈接是否需要被繼續跟蹤。例如: 表示本網頁(yè)不需要被抓取,但是網頁(yè)内的鏈接需要被跟蹤。
關于Robots.txt的語法和META Tag語法,有(yǒu)興趣的讀者查看文(wén)獻[4]
現在一般的網站都希望搜索引擎能(néng)更全面的抓取自己網站的網頁(yè),因為(wèi)這樣可(kě)以讓更多(duō)的訪問者能(néng)通過搜索引擎找到此網站。為(wèi)了讓本網站的網頁(yè)更全面被抓取到,網站管理(lǐ)員可(kě)以建立一個網站地圖,即Site Map。許多(duō)網絡蜘蛛會把sitemap.htm文(wén)件作(zuò)為(wèi)一個網站網頁(yè)爬取的入口,網站管理(lǐ)員可(kě)以把網站内部所有(yǒu)網頁(yè)的鏈接放在這個文(wén)件裏面,那麽網絡蜘蛛可(kě)以很(hěn)方便的把整個網站抓取下來,避免遺漏某些網頁(yè),也會減小(xiǎo)對網站服務(wù)器的負擔。
内容提取
搜索引擎建立網頁(yè)索引,處理(lǐ)的對象是文(wén)本文(wén)件。對于網絡蜘蛛來說,抓取下來網頁(yè)包括各種格式,包括html、圖片、doc、pdf、多(duō)媒體(tǐ)、動态網頁(yè)及其它格式等。這些文(wén)件抓取下來後,需要把這些文(wén)件中(zhōng)的文(wén)本信息提取出來。準确提取這些文(wén)檔的信息,一方面對搜索引擎的搜索準确性有(yǒu)重要作(zuò)用(yòng),另一方面對于網絡蜘蛛正确跟蹤其它鏈接有(yǒu)一定影響。
對于doc、pdf等文(wén)檔,這種由專業廠商(shāng)提供的軟件生成的文(wén)檔,廠商(shāng)都會提供相應的文(wén)本提取接口。網絡蜘蛛隻需要調用(yòng)這些插件的接口,就可(kě)以輕松的提取文(wén)檔中(zhōng)的文(wén)本信息和文(wén)件其它相關的信息。
HTML等文(wén)檔不一樣,HTML有(yǒu)一套自己的語法,通過不同的命令标識符來表示不同的字體(tǐ)、顔色、位置等版式,如:、、 等,提取文(wén)本信息時需要把這些标識符都過濾掉。過濾标識符并非難事,因為(wèi)這些标識符都有(yǒu)一定的規則,隻要按照不同的标識符取得相應的信息即可(kě)。但在識别這些信息的時候,需要同步記錄許多(duō)版式信息,例如文(wén)字的字體(tǐ)大小(xiǎo)、是否是标題、是否是加粗顯示、是否是頁(yè)面的關鍵詞等,這些信息有(yǒu)助于計算單詞在網頁(yè)中(zhōng)的重要程度。同時,對于HTML網頁(yè)來說,除了标題和正文(wén)以外,會有(yǒu)許多(duō)廣告鏈接以及公(gōng)共的頻道鏈接,這些鏈接和文(wén)本正文(wén)一點關系也沒有(yǒu),在提取網頁(yè)内容的時候,也需要過濾這些無用(yòng)的鏈接。例如某個網站有(yǒu)“産(chǎn)品介紹”頻道,因為(wèi)導航條在網站内每個網頁(yè)都有(yǒu),若不過濾導航條鏈接,在搜索“産(chǎn)品介紹”的時候,則網站内每個網頁(yè)都會搜索到,無疑會帶來大量垃圾信息。過濾這些無效鏈接需要統計大量的網頁(yè)結構規律,抽取一些共性,統一過濾;對于一些重要而結果特殊的網站,還需要個别處理(lǐ)。這就需要網絡蜘蛛的設計有(yǒu)一定的擴展性。
對于多(duō)媒體(tǐ)、圖片等文(wén)件,一般是通過鏈接的錨文(wén)本(即,鏈接文(wén)本)和相關的文(wén)件注釋來判斷這些文(wén)件的内容。例如有(yǒu)一個鏈接文(wén)字為(wèi)“張曼玉照片”,其鏈接指向一張bmp格式的圖片,那麽網絡蜘蛛就知道這張圖片的内容是“張曼玉的照片”。這樣,在搜索“張曼玉”和“照片”的時候都能(néng)讓搜索引擎找到這張圖片。另外,許多(duō)多(duō)媒體(tǐ)文(wén)件中(zhōng)有(yǒu)文(wén)件屬性,考慮這些屬性也可(kě)以更好的了解文(wén)件的内容。 動态網頁(yè)一直是網絡蜘蛛面臨的難題。所謂動态網頁(yè),是相對于靜态網頁(yè)而言,是由程序自動生成的頁(yè)面,這樣的好處是可(kě)以快速統一更改網頁(yè)風格,也可(kě)以減少網頁(yè)所占服務(wù)器的空間,但同樣給網絡蜘蛛的抓取帶來一些麻煩。由于開發語言不斷的增多(duō),動态網頁(yè)的類型也越來越多(duō),如:asp、jsp、php等。這些類型的網頁(yè)對于網絡蜘蛛來說,可(kě)能(néng)還稍微容易一些。網絡蜘蛛比較難于處理(lǐ)的是一些腳本語言(如VBScript和JavaScript)生成的網頁(yè),如果要完善的處理(lǐ)好這些網頁(yè),網絡蜘蛛需要有(yǒu)自己的腳本解釋程序。對于許多(duō)數據是放在數據庫的網站,需要通過本網站的數據庫搜索才能(néng)獲得信息,這些給網絡蜘蛛的抓取帶來很(hěn)大的困難。對于這類網站,如果網站設計者希望這些數據能(néng)被搜索引擎搜索,則需要提供一種可(kě)以遍曆整個數據庫内容的方法。
對于網頁(yè)内容的提取,一直是網絡蜘蛛中(zhōng)重要的技(jì )術。整個系統一般采用(yòng)插件的形式,通過一個插件管理(lǐ)服務(wù)程序,遇到不同格式的網頁(yè)采用(yòng)不同的插件處理(lǐ)。這種方式的好處在于擴充性好,以後每發現一種新(xīn)的類型,就可(kě)以把其處理(lǐ)方式做成一個插件補充到插件管理(lǐ)服務(wù)程序之中(zhōng)。
更新(xīn)周期
由于網站的内容經常在變化,因此網絡蜘蛛也需不斷的更新(xīn)其抓取網頁(yè)的内容,這就需要網絡蜘蛛按照一定的周期去掃描網站,查看哪些頁(yè)面是需要更新(xīn)的頁(yè)面,哪些頁(yè)面是新(xīn)增頁(yè)面,哪些頁(yè)面是已經過期的死鏈接。 搜索引擎的更新(xīn)周期對搜索引擎搜索的查全率有(yǒu)很(hěn)大影響。如果更新(xīn)周期太長(cháng),則總會有(yǒu)一部分(fēn)新(xīn)生成的網頁(yè)搜索不到;周期過短,技(jì )術實現會有(yǒu)一定難度,而且會對帶寬、服務(wù)器的資源都有(yǒu)浪費。搜索引擎的網絡蜘蛛并不是所有(yǒu)的網站都采用(yòng)同一個周期進行更新(xīn),對于一些重要的更新(xīn)量大的網站,更新(xīn)的周期短,如有(yǒu)些新(xīn)聞網站,幾個小(xiǎo)時就更新(xīn)一次;相反對于一些不重要的網站,更新(xīn)的周期就長(cháng),可(kě)能(néng)一兩個月才更新(xīn)一次。 一般來說,網絡蜘蛛在更新(xīn)網站内容的時候,不用(yòng)把網站網頁(yè)重新(xīn)抓取一遍,對于大部分(fēn)的網頁(yè),隻需要判斷網頁(yè)的屬性(主要是日期),把得到的屬性和上次抓取的屬性相比較,如果一樣則不用(yòng)更新(xīn)。
結論
本文(wén)主要讨論了網絡蜘蛛相關的技(jì )術要點,如果要設計好的網絡蜘蛛, 需要了解更多(duō)的技(jì )術細節,可(kě)以參考文(wén)獻
網絡蜘蛛在搜索引擎中(zhōng)占有(yǒu)重要位置,對搜索引擎的查全、查準都有(yǒu)影響,決定了搜索引擎數據容量的大小(xiǎo),而且網絡蜘蛛的好壞直接影響搜索結果頁(yè)中(zhōng)的死鏈接(即鏈接所指向的網頁(yè)已經不存在)的個數。目前如何發現更多(duō)的網頁(yè)、如何正确提取網頁(yè)内容、如果下載動态網頁(yè)、如何提供抓取速度、如何識别網站内内容相同的網頁(yè)等都是網絡蜘蛛需要進一步改進的問題。
|