網路蜘蛛
網路蜘蛛通過網頁的連結地址來尋找網頁,從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其他連結地址,然後通過這些連結地址尋找下一個網頁,這樣一直循環下去,直到把這個網頁都抓取完為止。如果把整個網際網路當做一個網站,那么網路蜘蛛就可以用這個原理把網際網路上所有的網頁都抓取下來。
什麼是網路蜘蛛呢?網路蜘蛛即Web Spider,是一個很形象的名字。把網際網路比喻成一個蜘蛛網,那么Spider就是在網上爬來爬去的蜘蛛。網路蜘蛛是通過網頁的連結地址來尋找網頁,從 網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址,然後通過這些連結地址尋找下一個網頁,這樣一直循環下去,直到把這個網 站所有的網頁都抓取完為止。如果把整個網際網路當成一個網站,那么網路蜘蛛就可以用這個原理把網際網路上所有的網頁都抓取下來。
這樣看來,網路蜘蛛就是一個爬行程式,一個抓取網頁的程式。
起源
要說網路蜘蛛的起源,我們還得從搜尋引擎說起,什麼是搜尋引擎呢?搜尋引擎的起源是什麼,這和網路蜘蛛的起源密切相關。
搜尋引擎指自動從網際網路蒐集信息,經過一定整理以後,提供給用戶進行查詢的系統。網際網路上的信息浩瀚萬千,而且毫無秩序,所有的信息像汪洋上的一個個小島,網頁連結是這些小島之間縱橫交錯的橋樑,而搜尋引擎,則為你繪製一幅一目了然的信息地圖,供你隨時查閱。
搜尋引擎從1990年原型初顯,到現在成為人們生活中必不可少的一部分,它經歷了太多技術和觀念的變革。
1994年的1月份,第一個既可搜尋又可瀏覽的分類目錄EINetGalaxy上線了。在它之後才出現了雅虎,直至我們現在熟知的Google、百度。但是他們都不是第一個吃搜尋引擎這個螃蟹的第一人。從搜尋FTP上的檔案開始,搜尋引擎的原型就出現了,那時還未有全球資訊網,當時人們先用手工後用蜘蛛程式搜尋網頁,但隨著網際網路的不斷壯大,怎樣能夠蒐集到的網頁數量更多、時間更短成為了當時的難點和重點,成為人們研究的重點。
搜尋引擎原型初顯
如果要追溯的話,搜尋引擎的歷史比WorldWideWeb 還要長。早在Web出現之前,網際網路上就已經存在許多旨在讓人們共享的信息資源了。這些資源當時主要存在於各種允許匿名訪問的FTP 站點。為了便於人們在分散的FTP資源中找到所需的東西,1990年,加拿大麥吉爾大學(McGillUniversity)的幾個大學生開發了一個軟體Archie。它是一個可搜尋的FTP檔案名稱列表,用戶必須輸入精確的檔案名稱搜尋,然後Archie會告訴用戶哪一個FTP地址可以下載這個檔案。Archie實際上是一個大型的資料庫,再加上與這個大型資料庫相關聯的一套檢索方法。Archie雖然還不是搜尋引擎,但是從它的工作原理上看,它是所有搜尋引擎的祖先。
當全球資訊網(WorldWideWeb)出現後,人們可以通過 html傳播網頁信息,網路上的信息開始成倍增長。人們紛紛使用各種方法將網路上的信息蒐集來,進行分類、整理,以方便查找。現在人們很熟悉的網站雅虎 (Yahoo)就是在這個環境下誕生的。還在Stanford大學讀書的美籍華人楊致遠和他的同學迷上了網際網路。他們將網際網路上有趣的網頁蒐集過來,與同學一起分享。後來,1994年4月,他們倆共同辦了雅虎。隨著訪問量和收錄連結數的增長,雅虎目錄開始支持簡單的資料庫搜尋。但是因為雅虎的數據是手工輸入的,所以不能真正被歸為搜尋引擎,事實上只是一個可搜尋的目錄。
當“蜘蛛”程式出現時,現代意義上的搜尋引擎才初露端倪。它實際上是一種電腦“機器人”(Computer Robot),電腦“機器人”是指某個能以人類無法達到的速度不間斷地執行某項任務的軟體程式。由於專門用於檢索信息的“機器人”程式就象蜘蛛一樣在網路間爬來爬去,反反覆覆,不知疲倦。所以,搜尋引擎的“機器人”程式就被稱為“蜘蛛”程式。
這種程式實際是利用html文檔之間的連結關係,在Web上一個網頁一個網頁的爬取(crawl),將這些網頁抓到系統來進行分析,並放入資料庫中。第一個開發出“蜘蛛”程式的是Matthew Gray,他於1993年開發了World Wide Web Wanderer,它最初建立時是為了統計網際網路上的伺服器數量,到後來發展到能夠捕獲網址。現代搜尋引擎的思路就來源於Wanderer,後來很多人在此基礎上對蜘蛛程式進行了改進。
1994年7月20日發布的Lycos網站第一個將 “蜘蛛”程式接入到其索引程式中。引入“蜘蛛”後給其帶來的最大優勢就在於其遠勝於其它搜尋引擎的數據量。自此之後幾乎所有占據主導地位的搜尋引擎中,都靠“蜘蛛”來蒐集網頁信息。Infoseek是另一個重要的搜尋引擎,於1994年年底才與公眾見面。起初,Infoseek只是一個不起眼的搜尋引擎,它沿襲Yahoo!和Lycos的概念,並沒有什麼獨特的革新。但是它友善的用戶界面、大量附加服務使它在用戶中贏得了口碑。1995年12月,它與Netscape的戰略性協定,使它成為一個強勢搜尋引擎:當用戶點擊Netscape瀏覽器上的搜尋按鈕時,彈出Infoseek的搜尋服務,而此前由Yahoo!提供該服務。 1995年12月15日,Alta Vista正式上線。它是第一個支持高級搜尋語法的搜尋引擎,成功地整合了此前人類所有的信息檢索技術,解決了包括字根處理、關鍵字檢索、布爾邏輯,以及通過向量空間模型的查詢排名等關鍵問題。正式公開之前,Alta Vista就已經擁有20萬訪問用戶,在短短三個星期之內,到訪人數由每天30萬次增加到200萬次。它的成功在於滿足了用戶三個方面的需求:網上索引範圍超過了此前任何一家搜尋引擎;短短几秒鐘內便可從龐大的資料庫中為用戶返回搜尋結果;Alta Vista小組從一開始就採用了一種模組設計技術,能夠跟蹤網站的流行趨勢,同時不斷擴大處理能力。在當時許多搜尋引擎之中,Alta Vista脫穎而出,成為網路搜尋的代名詞。Google就是站在這樣的巨人的肩膀上顛覆並創造著。“上網即搜尋” 改變了人們上網方式的,就是現在鼎鼎大名的Google。Google並不是搜尋引擎的發明者,甚至有點落後,但是它卻讓人們愛上了搜尋。
1998年9月,在佩奇和布林創建Google之時,業界對網際網路搜尋功能的理解是:某個關鍵字在一個文檔中出現的頻率越高,該文檔在搜尋結果中的排列位置就要越顯著。這就引出了這樣一個問題,如果一個頁面充斥著某一個關鍵字的話,那么它將排在很顯著的位置,但這樣一個頁面對於用戶來說,卻沒有任何意義。佩奇和布林發明了“網頁級別”(PageRank)技術,來排列搜尋結果。即考察該頁面在網上被連結的頻率和重要性來排列,網際網路上指向這一頁面的重要網站越多,該頁面的位次也就越高。當從網頁A連結到網頁B,Google 就認為“網頁A投了網頁B一票”。Google根據網頁的得票數評定其重要性。然而,除了考慮網頁得票數的純數量之外,Google還要分析投票的網頁,“重要”的網頁所投出的票就會有更高的權重,並且有助於提高其他網頁的“重要性”。 Google以其複雜而全自動的搜尋方法排除了任何人為因素對搜尋結果的影響。沒人能花錢買到更高的網頁級別,從而保證了網頁排名的客觀公正。除此之外,動態摘要、網頁快照、多文檔格式支持、地圖股票詞典尋人等集成搜尋也都深得網民的喜愛。其他眾多搜尋引擎也都緊跟Google,推出這些服務。Fast(Alltheweb)公司發布的搜尋引擎AllTheWeb,總部位於挪威,其在海外的風頭直逼Google。Alltheweb的網頁搜尋支持Flash和pdf搜尋,支持多語言搜尋,還提供新聞搜尋、圖像搜尋、視頻、MP3、和FTP搜尋,擁有極其強大的高級搜尋功能。而中國的百度更是憑藉“更懂中文”而吸引著中國的網路客群,它擁有超過10億的中文網頁資料庫,並且,這些網頁的數量每天正以千萬級的速度在增長。
搜尋引擎越來越成為人們生活中重要的一部分,找資料、查地圖、聽音樂,只有想不到的,沒有搜尋不到的。
搜尋引擎的三個基本原理
1.利用蜘蛛系統程式,自動訪問網際網路,並沿著任何網頁中的所有URL爬到其它網頁,重複這過程,並把爬過的所有網頁收集回來。
2.由分析索引系統程式對收集回來的網頁進行分析,提取相關網頁信息,根據一定的相關度算法進行大量複雜計算,得到每一個網頁針對頁面內容中及超鏈中每一個關鍵字的相關度(或重要性),然後用這些相關信息建立網頁索引資料庫。
3.當用戶輸入關鍵字搜尋後,由搜尋系統程式從網頁索引資料庫中找到符合該關鍵字的所有相關網頁。相關度數值排序,相關度越高,排名越靠前。最後,由頁面生成系統將搜尋結果的連結地址和頁面內容摘要等內容組織起來返回給用戶。
說到這裡,你可能對搜尋引擎和網路蜘蛛有了一個初步的了解了吧!
工作原理
對於搜尋引擎來說,要抓取網際網路上所有的網頁幾乎是不可能的,從目前公布的數據來看,容量最大的搜尋引擎也不過是抓取了整個網頁數量的百分之四十左右。這 其中的原因一方面是抓取技術的瓶頸,無法遍歷所有的網頁,有許多網頁無法從其它網頁的連結中找到;另一個原因是存儲技術和處理技術的問題,如果按照每個頁 面的平均大小為20K計算(包含圖片),100億網頁的容量是100×2000G位元組,即使能夠存儲,下載也存在問題(按照一台機器每秒下載20K計算, 需要340台機器不停的下載一年時間,才能把所有網頁下載完畢)。同時,由於數據量太大,在提供搜尋時也會有效率方面的影響。因此,許多搜尋引擎的網路蜘 蛛只是抓取那些重要的網頁,而在抓取的時候評價重要性主要的依據是某個網頁的連結深度。
在抓取網頁的時候,網路蜘蛛一般有兩種策略:廣度優先和深度優先(如下圖所示)。
廣度優先是指網路蜘蛛會先抓取起始網頁中連結的所有網頁,然後再選擇其中 的一個連結網頁,繼續抓取在此網頁中連結的所有網頁。這是最常用的方式,因為這個方法可以讓網路蜘蛛並行處理,提高其抓取速度。深度優先是指網路蜘蛛會從 起始頁開始,一個連結一個連結跟蹤下去,處理完這條線路之後再轉入下一個起始頁,繼續跟蹤連結。這個方法有個優點是網路蜘蛛在設計的時候比較容易。兩種策 略的區別,下圖的說明會更加明確。
由於不可能抓取所有的網頁,有些網路蜘蛛對一些不太重要的網站,設定了訪問的層數。例如,在上圖中,A為起始網頁,屬於0層,B、C、D、E、F屬於第1 層,G、H屬於第2層,I屬於第3層。如果網路蜘蛛設定的訪問層數為2的話,網頁I是不會被訪問到的。這也讓有些網站上一部分網頁能夠在搜尋引擎上搜尋 到,另外一部分不能被搜尋到。對於網站設計者來說,扁平化的網站結構設計有助於搜尋引擎抓取其更多的網頁。
網路蜘蛛在訪問網站網頁的時候,經常會遇到加密數據和網頁許可權的問題,有些網頁是需要會員許可權才能訪問。當然,網站的所有者可以通過協定讓網路蜘蛛不去抓 取(下小節會介紹),但對於一些出售報告的網站,他們希望搜尋引擎能搜尋到他們的報告,但又不能完全免費的讓搜尋者查看,這樣就需要給網路蜘蛛提供相應的 用戶名和密碼。網路蜘蛛可以通過所給的許可權對這些網頁進行網頁抓取,從而提供搜尋。而當搜尋者點擊查看該網頁的時候,同樣需要搜尋者提供相應的許可權驗證。
每個網路蜘蛛都有自己的名字,在抓取網頁的時候,都會向網站標明自己的身份。網路蜘蛛在抓取網頁的時候會傳送一個請求,這個請求中就有一個欄位為User -agent,用於標識此網路蜘蛛的身份。例如Google網路蜘蛛的標識為GoogleBot,Baidu網路蜘蛛的標識為BaiDuSpider, Yahoo網路蜘蛛的標識為Inktomi Slurp。如果在網站上有訪問日誌記錄,網站管理員就能知道,哪些搜尋引擎的網路蜘蛛過來過,什麼時候過來的,以及讀了多少數據等等。如果網站管理員發 現某個蜘蛛有問題,就通過其標識來和其所有者聯繫。
網路蜘蛛進入一個網站,一般會訪問一個特殊的文本檔案Robots.txt,這個檔案一般放在網站伺服器的根目錄下,網站管理員可以通過robots.txt來定義哪些目錄網路蜘蛛不能訪問,或者哪些目錄對於某些特定的網路蜘蛛不能訪問。例如有些網站的執行檔目錄和臨時檔案目錄不希望被搜尋引擎搜尋到,那么網站管理員就可以把這些目錄定義為拒絕訪問目錄。Robots.txt語法很簡單,例如如果對目錄沒有任何限 制,可以用以下兩行來描述: User-agent: * Disallow:
當然,Robots.txt只是一個協定,如果網路蜘蛛的設計者不遵循這個協定,網站管理員也無法阻止網路蜘蛛對於某些頁面的訪問,但一般的網路蜘蛛都會遵循這些協定,而且網站管理員還可以通過其它方式來拒絕網路蜘蛛對某些網頁的抓取。
網路蜘蛛在下載網頁的時候,會去識別網頁的HTML代碼,在其代碼的部分,會有META標識。通過這些標識,可以告訴網路蜘蛛本網頁是否需要被抓取,還可 以告訴網路蜘蛛本網頁中的連結是否需要被繼續跟蹤。例如:表示本網頁不需要被抓取,但是網頁內的連結需要被跟蹤。
搜尋引擎建立網頁索引,處理的對象是文本檔案。對於網路蜘蛛來說,抓取下來網頁包括各種格式,包括html、圖片、doc、pdf、多媒體、動態網頁及其 它格式等。這些檔案抓取下來後,需要把這些檔案中的文本信息提取出來。準確提取這些文檔的信息,一方面對搜尋引擎的搜尋準確性有重要作用,另一方面對於網 絡蜘蛛正確跟蹤其它連結有一定影響。對於doc、pdf等文檔,這種由專業廠商提供的軟體生成的文檔,廠商都會提供相應的文本提取接口。網路蜘蛛只需要調用這些外掛程式的接口,就可以輕鬆的提取文檔中的文本信息和檔案其它相關的信息。但HTML等文檔不一樣,HTML有一套自己的語法,通過不同的命令標識符來表示不同的字型、顏色、位置等版式,如:、、等, 提取文本信息時需要把這些標識符都過濾掉。過濾標識符並非難事,因為這些標識符都有一定的規則,只要按照不同的標識符取得相應的信息即可。但在識別這些信 息的時候,需要同步記錄許多版式信息,例如文字的字型大小、是否是標題、是否是加粗顯示、是否是頁面的關鍵字等,這些信息有助於計算單詞在網頁中的重要程 度。同時,對於HTML網頁來說,除了標題和正文以外,會有許多廣告連結以及公共的頻道連結,這些連結和文本正文一點關係也沒有,在提取網頁內容的時候, 也需要過濾這些無用的連結。例如某個網站有“產品介紹”頻道,因為導航條在網站內每個網頁都有,若不過濾導航條連結,在搜尋“產品介紹”的時候,則網站內 每個網頁都會搜尋到,無疑會帶來大量垃圾信息。過濾這些無效連結需要統計大量的網頁結構規律,抽取一些共性,統一過濾;對於一些重要而結果特殊的網站,還 需要個別處理。這就需要網路蜘蛛的設計有一定的擴展性。
對於多媒體、圖片等檔案,一般是通過連結的錨文本(即,連結文本)和相關的檔案注釋來判斷這些檔案的內容。例如有一個連結文字為“張曼玉照片”,其連結指 向一張bmp格式的圖片,那么網路蜘蛛就知道這張圖片的內容是“張曼玉的照片”。這樣,在搜尋“張曼玉”和“照片”的時候都能讓搜尋引擎找到這張圖片。另 外,許多多媒體檔案中有檔案屬性,考慮這些屬性也可以更好的了解檔案的內容。
動態網頁一直是網路蜘蛛面臨的難題。所謂動態網頁,是相對於靜態網頁而言,是由程式自動生成的頁面,這樣的好處是可以快速統一更改網頁風格,也可以減少網 頁所占伺服器的空間,但同樣給網路蜘蛛的抓取帶來一些麻煩。由於開發語言不斷的增多,動態網頁的類型也越來越多,如:asp、jsp、php等。這些類型 的網頁對於網路蜘蛛來說,可能還稍微容易一些。網路蜘蛛比較難於處理的是一些腳本語言(如VBScript和JavaScript)生成的網頁,如果要完 善的處理好這些網頁,網路蜘蛛需要有自己的腳本解釋程式。對於許多數據是放在資料庫的網站,需要通過本網站的資料庫搜尋才能獲得信息,這些給網路蜘蛛的抓 取帶來很大的困難。對於這類網站,如果網站設計者希望這些數據能被搜尋引擎搜尋,則需要提供一種可以遍歷整個資料庫內容的方法。
對於網頁內容的提取,一直是網路蜘蛛中重要的技術。整個系統一般採用外掛程式的形式,通過一個外掛程式管理服務程式,遇到不同格式的網頁採用不同的外掛程式處理。這種 方式的好處在於擴充性好,以後每發現一種新的類型,就可以把其處理方式做成一個外掛程式補充到外掛程式管理服務程式之中。
由於網站的內容經常在變化,因此網路蜘蛛也需不斷的更新其抓取網頁的內容,這就需要網路蜘蛛按照一定的周期去掃描網站,查看哪些頁面是需要更新的頁面,哪些頁面是新增頁面,哪些頁面是已經過期的死連結。
搜尋引擎的更新周期對搜尋引擎搜尋的查全率有很大影響。如果更新周期太長,則總會有一部分新生成的網頁搜尋不到;周期過短,技術實現會有一定難度,而且會 對頻寬、伺服器的資源都有浪費。搜尋引擎的網路蜘蛛並不是所有的網站都採用同一個周期進行更新,對於一些重要的更新量大的網站,更新的周期短,如有些新聞 網站,幾個小時就更新一次;相反對於一些不重要的網站,更新的周期就長,可能一兩個月才更新一次。
一般來說,網路蜘蛛在更新網站內容的時候,不用把網站網頁重新抓取一遍,對於大部分的網頁,只需要判斷網頁的屬性(主要是日期),把得到的屬性和上次抓取的屬性相比較,如果一樣則不用更新。
現在大家對網路蜘蛛的工作原理有了初步的了解了吧,了解後就要在以後的網站製作中考慮蜘蛛的爬行規律,比如製作網站地圖就很重要,好了,如果你有更好的見解,請到這裡發表,火鳥非常願意與你交流,共同研究網站製作技巧,儘量將自己的網站製作的符合標準,符合用戶的習慣!
現代搜尋引擎對網頁的重要性一般用PR值來量化。
一般說來,PR值越高,反映在在搜尋結果中的排名越靠前(重要新越高),當前有很多人通過很多方式來提高自己網站的PR值,除網站內部的最佳化外,大多數人採用的是外部連結。
如下:
PR(A) = (1-d) + d(PR(t1)/C(t1) + ... + PR(tn)/C(tn))
其中PR(A)表示的是從一個外部連結站點t1上,依據Pagerank?系統給你的網站所增加的PR分值;PR(t1)表示該外部連結網站本身的PR分值;C(t1)則表示該外部連結站點所擁有的外部連結數量。大家要謹記:一個網站的投票權值只有該網站PR分值的0.85,而且這個0.85的權值平均分配給其連結的每個外部網站。
構想一個名為akamarketing. c o m的網站,被連結至PR值為4,外部連結數為10的網站XYZ. C O M,則計算公式如下:
PR(AKA) = (1-0.85) + 0.85*(4/10)
PR(AKA) = 0.15 + 0.85*(0.4)
PR(AKA) = 0.15 + 0.34
PR(AKA) = 0.49
也就是說,如果我的網站獲得一個PR值為4,外部連結數為9的網站的連結,最後我的網站將獲得0.49的PR分值。
再讓我們看看如果我的網站獲得的是一個PR分值為8,外部連結數為16的網站的連結,那么我將獲得的PR分值將是:
PR(AKA) = (1-0.85) + 0.85*(8/16)
PR(AKA) = 0.15 + 0.85(0.5)
PR(AKA) = 0.15 + 0.425
PR(AKA) = 0.575
上述兩個例子表明,外部連結站點的PR值固然重要,該站點的外部連結數也是一個需要考慮的重要因素。
吸引搜尋方法
一、先發制人
搜尋引擎蜘蛛對於新站都不是太感冒,既然很多新手站長前期建網站就是需要蜘蛛的抓取才能最終收錄增加,如果蜘蛛幾天或者是幾周都不來你的網站爬行那么我們就可以先發制人去引導蜘蛛來我們網站,我們可以去一些比較火爆權重比較高的站點論壇進行一些關鍵字和連結的留言,這樣有效的進行了外鏈的發布,一般高權重的站點蜘蛛來的是非常頻繁的基本上你一發就可以看到蜘蛛順著你留下的網址自然而然就爬進你的站點進行抓取。
二、每日準備新鮮的“食物”
搜尋引擎蜘蛛是比較青睞於一個網站有它自己的獨特風格和特色還有網站自己的原創內容,蜘蛛只要第一次在你的網站裡抓取到了它想要的內容那么以後的許多天裡它會非常頻繁的在你的部落格進行反覆的爬行和抓取新的內容,所以我們站長必須每天都更新原創內容以便餵飽蜘蛛,只有這樣蜘蛛養成習慣了就會自然而然的每天在你的網站進行多次瀏覽與爬行,久而久之網站的權重和收錄的數量還有快照更新的時間全部都會提升。
三、外鏈為皇
很多站長都知道網站的外鏈對網站的發展是多么重要的,一個網站的排名好壞有很大一部分都在於外鏈的問題上而且一個高效的外鏈也是非常重要的,站長可以去一些比較出名而且權重比較高的部落格論壇去發布自己的網站外鏈,這樣蜘蛛就可以很好的有效的進行引導。
四、友情連結的重要性
相信很多站長都不太注重友情連結的交換,現 在有不少的站長利用購買高權重連結來帶動整體網站的權重和蜘蛛的抓取,我們既然選擇交換友情連結那么就要選擇收錄比較多、快照不超過七天、站長能夠每日更新的站點進行友情連結的交換。
五、給搜尋引擎機器人一條通順的道路
對於很多新手站長而言都不太知道網站地圖這個系統,網站地圖主要就是給搜尋引擎蜘蛛來使用的創建一個站點地圖,包含站內所有的頁面連線。保持更新。它幫助蜘蛛進入每個頁面。在主頁面放一個指向站點地圖的文字連線。