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