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