由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。這就成為robots.txt里的新成員了。
節(jié)選一段google robots.txt:
Sitemap: http://www.gstatic.com/culturalinstitute/sitemaps/www_google_com_culturalinstitute/sitemap-index.xmlSitemap: http://www.google.com/hostednews/sitemap_index.xml插一句,考慮到一個網(wǎng)站的網(wǎng)頁眾多,sitemap人工維護(hù)不太靠譜,google提供了工具可以自動生成sitemap。
metatag
其實嚴(yán)格來說這部分內(nèi)容不屬于robots.txt,不過也算非常相關(guān),我也不知道放哪里合適,暫且放到這里吧。
robots.txt 的初衷是為了讓網(wǎng)站管理員管理可以出現(xiàn)在搜索引擎里的網(wǎng)站內(nèi)容。但是,即使使用 robots.txt 文件讓爬蟲無法抓取這些內(nèi)容,搜索引擎也可以通過其他方式找到這些網(wǎng)頁并將它添加到索引中。例如,其他網(wǎng)站仍可能鏈接到該網(wǎng)站。因此,網(wǎng)頁網(wǎng)址及其他公開的信息(如指向相關(guān)網(wǎng)站的鏈接中的定位文字或開放式目錄管理系統(tǒng)中的標(biāo)題)有可能會出現(xiàn)在引擎的搜索結(jié)果中。如果想徹底對搜索引擎隱身那咋整呢?答案是: 元標(biāo)記,即meta tag。
比如要完全阻止一個網(wǎng)頁的內(nèi)容列在搜索引擎索引中(即使有其他網(wǎng)站鏈接到此網(wǎng)頁),可使用 noindex 元標(biāo)記。只要搜索引擎查看該網(wǎng)頁,便會看到 noindex 元標(biāo)記并阻止該網(wǎng)頁顯示在索引中,這里注意noindex元標(biāo)記提供的是一種逐頁控制對網(wǎng)站的訪問的方式。
舉例:
要防止所有搜索引擎將網(wǎng)站中的網(wǎng)頁編入索引,在網(wǎng)頁的部分添加:
<meta name="robots"content="noindex">
這里的name取值可以設(shè)置為某個搜索引擎的User-agent從而指定屏蔽某一個搜索引擎。
除了noindex外,還有其他元標(biāo)記,比如說nofollow,禁止爬蟲從此頁面中跟蹤鏈接。詳細(xì)信息可以參考Google支持的元標(biāo)記,這里提一句:noindex和nofollow在HTML 4.01規(guī)范里有描述,但是其他tag的在不同引擎支持到什么程度各不相同,還請讀者自行查閱各個引擎的說明文檔。
Crawl-delay
除了控制哪些可以抓哪些不能抓之外,robots.txt還可以用來控制爬蟲抓取的速率。如何做到的呢?通過設(shè)置爬蟲在兩次抓取之間等待的秒數(shù)。
Crawl-delay:5
表示本次抓取后下一次抓取前需要等待5秒。
注意:google已經(jīng)不支持這種方式了,在webmastertools里提供了一個功能可以更直觀的控制抓取速率。
這 里插一句題外話,幾年前我記得曾經(jīng)有一段時間robots.txt還支持復(fù)雜的參數(shù):Visit-time,只有在visit-time指定的時間段里, 爬蟲才可以訪問;Request-rate: 用來限制URL的讀取頻率,用于控制不同的時間段采用不同的抓取速率。后來估計支持的人太少,就漸漸的廢掉了,有興趣的同學(xué)可以自行g(shù)oogle。我了解 到的是目前google和baidu都已經(jīng)不支持這個規(guī)則了,其他小的引擎公司貌似從來都沒有支持過。如果確有支持那是我孤陋寡聞了,歡迎留言告知。
真的有用?
好吧,到此為止robots.txt相關(guān)的東東介紹的也七七八八了,能堅持看到這里的同學(xué)估計都躍躍欲試了,可惜,我要潑盆冷水,能完全指望robots.txt保護(hù)我們網(wǎng)站的內(nèi)容嗎?不一定。否則百度和360就不用打官司了。
協(xié)議一致性
第一個問題是robots.txt沒有一個正式的標(biāo)準(zhǔn),各個搜索引擎都在不斷的擴(kuò)充robots.txt功能,這就導(dǎo)致每個引擎對robots.txt的支持程度各有不同,更不用說在某個功能上的具體實現(xiàn)的不同了。
緩存
第 二個問題是robots.txt本身也是需要抓取的,出于效率考慮,一般爬蟲不會每次抓取網(wǎng)站網(wǎng)頁前都抓一下robots.txt,加上 robots.txt更新不頻繁,內(nèi)容需要解析。通常爬蟲的做法是先抓取一次,解析后緩存下來,而且是相當(dāng)長的時間。假設(shè)網(wǎng)站管理員更新了 robots.txt,修改了某些規(guī)則,但是對爬蟲來說并不會立刻生效,只有當(dāng)爬蟲下次抓取robots.txt之后才能看到最新的內(nèi)容。尷尬的是,爬蟲下次抓取robots.txt的時間并不是由網(wǎng)站管理員控制的。當(dāng)然,有些搜索引擎提供了web 工具可以讓網(wǎng)站管理員通知搜索引擎那個url發(fā)生了變化,建議重新抓取。注意,此處是建議,即使你通知了搜索引擎,搜索引擎何時抓取仍然是不確定的,只是比完全不通知要好點。至于好多少,那就看搜索引擎的良心和技術(shù)能力了。
ignore
第三 個問題,不知是無意還是有意,反正有些爬蟲不太遵守或者完全忽略robots.txt,不排除開發(fā)人員能力的問題,比如說根本不知道 robots.txt。另外,本身robots.txt不是一種強(qiáng)制措施,如果網(wǎng)站有數(shù)據(jù)需要保密,必需采取技術(shù)措施,比如說:用戶驗證,加密,ip攔 截,訪問頻率控制等。
偷偷的抓
第四個問題,即使采用了種種限制,仍然存在某些惡意的抓取行為能突破這些限制,比如一些利用肉雞進(jìn)行的抓取。悲觀的說,只要普通用戶可以訪問,就不能完全杜絕這種惡意抓取的行為。但是,可以通過種種手段使抓取的代價增大到讓對方無法接受。比如說:Captcha, Ajax用戶行為驅(qū)動的異步加載等等。這個就不屬于本文討論的范疇了。
泄密
最 后,robots.txt本身還存在泄密的風(fēng)險。舉例,如果某一個網(wǎng)站的robots.txt里突然新增了一條:Disallow /map/,你想到了什么?是不是要推出地圖服務(wù)了?于是有好奇心的同學(xué)就會開始嘗試各種文件名去訪問該路徑下的文件,希望能看到驚喜。貌似當(dāng)初 google的地圖就是這么被提前爆出來的,關(guān)于這點我不太確定,大家就當(dāng)八卦聽聽好了。
工具
google webmaster tools
robots.txt生成工具
Perl robots.txt解析器
Python robots.txt解析器