當(dāng)前位置:首頁 >  站長(zhǎng) >  搜索優(yōu)化 >  正文

玩轉(zhuǎn)robots協(xié)議

 2015-05-13 21:52  來源: 互聯(lián)網(wǎng)   我來投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過

2013年2月8日北京市第一中級(jí)人民法院正式受理了百度訴奇虎360違反“Robots協(xié)議”抓取、復(fù)制其網(wǎng)站內(nèi)容的不正當(dāng)競(jìng)爭(zhēng)行為一案,索賠金額高達(dá)一億元,這可以看做2012年下半年“3B大戰(zhàn)”的繼續(xù)。在此次索賠案件中,百度稱自己的Robots文本中已設(shè)定不允許360爬蟲進(jìn)入,而360的爬蟲依然對(duì)“百度知道”、“百度百科”等百度網(wǎng)站內(nèi)容進(jìn)行抓取。

其實(shí)早在2012年11月初,針對(duì)雙方摩擦加劇的情況,在中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)的牽頭下,包括百度、新浪、奇虎360在內(nèi)的12家互聯(lián)網(wǎng)公司已共同簽署了《互聯(lián)網(wǎng)搜索引擎服務(wù)自律公約》,在公約第七條承諾“遵循國(guó)際通行的行業(yè)慣例與商業(yè)規(guī)則,遵守機(jī)器人協(xié)議(robots協(xié)議)。

今天就找個(gè)機(jī)會(huì)聊聊一夜成名的robots協(xié)議。

初識(shí)robots協(xié)議

什么是robots

要了解robots協(xié)議首先要了解robots,本文說的robots不是《I,robot》里的威爾·史密斯,不是《機(jī)器人總動(dòng)員》里的瓦力和伊娃,不是《終結(jié)者》系列中的施瓦辛格。什么?這些經(jīng)典電影你都不知道?好吧,算我想多了。本文的robots特指搜索引擎領(lǐng)域的web robots,這個(gè)名字可能很多人不熟悉,但是提到Web Wanderers,Crawlers和Spiders很多人可能就恍然大悟了,在中文里我們統(tǒng)稱為爬蟲或者網(wǎng)絡(luò)爬蟲,也就是搜索引擎抓取互聯(lián)網(wǎng)網(wǎng)頁的程序。

同學(xué)們都知道網(wǎng)頁是通過超級(jí)鏈接互相關(guān)聯(lián)起來的,從而形成了網(wǎng)頁的網(wǎng)狀結(jié)構(gòu)。爬蟲的工作方式就像蜘蛛在網(wǎng)上沿著鏈接爬來爬去,最基本的流程可以簡(jiǎn)化如下:

1.喂給爬蟲一堆url,我們稱之為種子(seeds)

2.爬蟲抓取seeds,解析html網(wǎng)頁,抽取其中的超級(jí)鏈接

3.爬蟲接著抓取這些新發(fā)現(xiàn)的鏈接指向的網(wǎng)頁

2,3循環(huán)往復(fù)

什么是robots協(xié)議

了解了上面的流程就能看到對(duì)爬蟲來說網(wǎng)站非常被動(dòng),只有老老實(shí)實(shí)被抓取的份。存在這樣的需求:

1.某些路徑下是個(gè)人隱私或者網(wǎng)站管理使用,不想被搜索引擎抓取,比如說日本愛情動(dòng)作片

2.不喜歡某個(gè)搜索引擎,不愿意被他抓取,最有名的就是之前淘寶不希望被百度抓取

3.小網(wǎng)站使用的是公用的虛擬主機(jī),流量有限或者需要付費(fèi),希望搜索引擎抓的溫柔點(diǎn)

4.某些網(wǎng)頁是動(dòng)態(tài)生成的,沒有直接的鏈接指向,但是希望內(nèi)容被搜索引擎抓取和索引

網(wǎng)站內(nèi)容的所有者是網(wǎng)站管理員,搜索引擎應(yīng)該尊重所有者的意愿,為了滿足以上等等,就需要提供一種網(wǎng)站和爬蟲進(jìn)行溝通的途徑,給網(wǎng)站管理員表達(dá)自己意愿的機(jī)會(huì)。有需求就有供應(yīng),robots協(xié)議就此誕生。Robots協(xié)議,學(xué)名叫:The Robots Exclusion Protocol,就搜索引擎抓取網(wǎng)站內(nèi)容的范圍作了約定,包括網(wǎng)站是否希望被搜索引擎抓取,哪些內(nèi)容不允許被抓取,把這些內(nèi)容放到一個(gè)純文本文件robots.txt里,然后放到站點(diǎn)的根目錄下。爬蟲抓取網(wǎng)站內(nèi)容前會(huì)先抓取robots.txt,據(jù)此“自覺地”抓取或者不抓取該網(wǎng)頁內(nèi)容,其目的是保護(hù)網(wǎng)站數(shù)據(jù)和敏感信息、確保用戶個(gè)人信息和隱私不被侵犯。

需要注意的是robots協(xié)議并非是規(guī)范,只是行業(yè)內(nèi)一個(gè)約定俗成的協(xié)議。什么意思呢?Robots協(xié)議不是什么技術(shù)壁壘,而只是一種互相尊重的協(xié)議,好比私家花園的門口掛著“閑人免進(jìn)”,尊重者繞道而行,不尊重者依然可以推門而入,比如說360。

說了這么多,看幾個(gè)有名的例子感覺一下先:

例子1:淘寶

User-agent: Baiduspider

Disallow: /

User-agent: baiduspider

Disallow: /

程序猿,你懂的。這不就是淘寶不想讓百度抓取嘛

例子2:京東

User-agent: *

Disallow: /?*

Disallow: /pop/*.html

User-agent: EtaoSpider

Disallow: /

這個(gè)也不復(fù)雜,京東有2個(gè)目錄不希望所有搜索引擎來抓。同時(shí),對(duì)etao完全屏蔽。

基本玩法

robots.txt的位置

說簡(jiǎn)單也簡(jiǎn)單,robots.txt放到一個(gè)站點(diǎn)的根目錄下即可。說復(fù)雜也有點(diǎn)小復(fù)雜,一個(gè)robots.txt只能控制相同協(xié)議,相同端口,相同站點(diǎn)的網(wǎng)頁抓取策略。什么意思呢?看個(gè)例子最清楚:

百度網(wǎng)頁搜索

百度知道

這兩個(gè)robots.txt的內(nèi)容是不同的,也就是說百度網(wǎng)頁搜索和百度知道的抓取策略可以由自己獨(dú)立的robots.txt來控制,井水不犯河水。

robots.txt的內(nèi)容

最簡(jiǎn)單的robots.txt只有兩條規(guī)則:

1.User-agent:指定對(duì)哪些爬蟲生效

2.Disallow:指定要屏蔽的網(wǎng)址

整個(gè)文件分為x節(jié),一節(jié)由y個(gè)User-agent行和z個(gè)Disallow行組成。一節(jié)就表示對(duì)User-agent行指定的y個(gè)爬蟲屏蔽z個(gè)網(wǎng)址。這里x>=0,y>0,z>0。x=0時(shí)即表示空文件,空文件等同于沒有robots.txt。

下面詳細(xì)介紹這兩條規(guī)則:

User-agent

爬蟲抓取時(shí)會(huì)聲明自己的身份,這就是User-agent,沒錯(cuò),就是http協(xié)議里的User-agent。robots.txt利用User-agent來區(qū)分各個(gè)引擎的爬蟲。

舉例說明:google網(wǎng)頁搜索爬蟲的User-agent為Googlebot,下面這行就指定google的爬蟲。

User-agent:Googlebot

如果想指定所有的爬蟲怎么辦?不可能窮舉啊,可以用下面這一行:

User-agent: *

可能有的同學(xué)要問了,我怎么知道爬蟲的User-agent是什么?這里提供了一個(gè)簡(jiǎn)單的列表:爬蟲列表

當(dāng)然,你還可以查相關(guān)搜索引擎的資料得到官方的數(shù)據(jù),比如說google爬蟲列表,百度爬蟲列表

Disallow

Disallow 行列出的是要攔截的網(wǎng)頁,以正斜線 (/) 開頭,可以列出特定的網(wǎng)址或模式。

要屏蔽整個(gè)網(wǎng)站,使用正斜線即可:

Disallow: /

要屏蔽某一目錄以及其中的所有內(nèi)容,在目錄名后添加正斜線:

Disallow: /無用目錄名/

要屏蔽某個(gè)具體的網(wǎng)頁,就指出這個(gè)網(wǎng)頁。

Disallow: /網(wǎng)頁.html

Disallow還可以使用前綴和通配符。

要屏蔽目錄a1-a100,可以使用上面的方式寫100行,或者

Disallow:/a

但是需要注意,這樣會(huì)把任何以a開頭的目錄和文件也屏蔽,慎用。如果需要屏蔽a1-a100,但是不屏蔽a50,怎么辦?同學(xué)們可以思考一下,這個(gè)問題我們留到下一節(jié)。

要阻止特定類型的文件(如 .gif),請(qǐng)使用以下內(nèi)容:

Disallow: /*.gif$

*匹配任意個(gè)字符,$匹配url結(jié)束,具體就不解釋了吧,不了解的同學(xué)去自學(xué)一下通配符。

提示一下,Disallow的內(nèi)容區(qū)分大小寫。例如,Disallow: /junkfile.asp 會(huì)屏蔽 junkfile.asp,卻會(huì)允許Junk_file.asp。

最最后,通配符不是所有搜索引擎都支持,使用要小心。沒辦法,誰讓robots.txt沒有一個(gè)大家都承認(rèn)的標(biāo)準(zhǔn)呢。

實(shí)例 ###

百度網(wǎng)頁搜索

User-agent: Baiduspider

Disallow: /baidu

Disallow: /s?

User-agent: Googlebot

Disallow: /baidu

Disallow: /s?

Disallow: /shifen/

Disallow: /homepage/

Disallow: /cpro

User-agent: MSNBot

Disallow: /baidu

Disallow: /s?

Disallow: /shifen/

Disallow: /homepage/

Disallow: /cpro

...

現(xiàn)在讀懂這個(gè)應(yīng)該毫無壓力了吧,順便說一句百度的robots.txt比較啰嗦,有興趣的同學(xué)可以簡(jiǎn)化一下。

高階玩法

首先聲明:高級(jí)玩法不是所有引擎的爬蟲都支持,一般來說,作為搜索引擎技術(shù)領(lǐng)導(dǎo)者的谷歌支持的最好。

例子:google robots.txt

allow

還記得上面的問題嗎?如果需要屏蔽a1-a100,但是不屏蔽a50,怎么辦?

方案1:

Disallow:/a1/

Disallow:/a2/

...

Disallow:/a49/

Disallow:/a51/

...

Disallow:/a100/

方案2:

Disallow:/a

Allow:/a50/

ok,allow大家會(huì)用了吧。

順便說一句,如果想屏蔽a50下面的文件private.html,咋整?

Disallow:/a

Allow:/a50/

Disallow:/a50/private.html

聰明的你一定能發(fā)現(xiàn)其中的規(guī)律,對(duì)吧?誰管的越細(xì)就聽誰的。

sitemap

前面說過爬蟲會(huì)通過網(wǎng)頁內(nèi)部的鏈接發(fā)現(xiàn)新的網(wǎng)頁。但是如果沒有連接指向的網(wǎng)頁怎么辦?或者用戶輸入條件生成的動(dòng)態(tài)網(wǎng)頁怎么辦?能否讓網(wǎng)站管理員通知搜索引擎他們網(wǎng)站上有哪些可供抓取的網(wǎng)頁?這就是sitemap,最簡(jiǎn)單的 Sitepmap 形式就是 XML 文件,在其中列出網(wǎng)站中的網(wǎng)址以及關(guān)于每個(gè)網(wǎng)址的其他數(shù)據(jù)(上次更新的時(shí)間、更改的頻率以及相對(duì)于網(wǎng)站上其他網(wǎng)址的重要程度等等),利用這些信息搜索引擎可以更加智能地抓取網(wǎng)站內(nèi)容。

sitemap是另一個(gè)話題,足夠開一篇新的文章聊的,這里就不展開了,有興趣的同學(xué)可以參考sitemap

新的問題來了,爬蟲怎么知道這個(gè)網(wǎng)站有沒有提供sitemap文件,或者說網(wǎng)站管理員生成了sitemap,(可能是多個(gè)文件),爬蟲怎么知道放在哪里呢?

由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。這就成為robots.txt里的新成員了。

節(jié)選一段google robots.txt:

Sitemap:

Sitemap:

插一句,考慮到一個(gè)網(wǎng)站的網(wǎng)頁眾多,sitemap人工維護(hù)不太靠譜,google提供了工具可以自動(dòng)生成sitemap。

meta tag

其實(shí)嚴(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)題)有可能會(huì)出現(xiàn)在引擎的搜索結(jié)果中。如果想徹底對(duì)搜索引擎隱身那咋整呢?答案是:元標(biāo)記,即meta tag。

比如要完全阻止一個(gè)網(wǎng)頁的內(nèi)容列在搜索引擎索引中(即使有其他網(wǎng)站鏈接到此網(wǎng)頁),可使用 noindex 元標(biāo)記。只要搜索引擎查看該網(wǎng)頁,便會(huì)看到 noindex 元標(biāo)記并阻止該網(wǎng)頁顯示在索引中,這里注意noindex元標(biāo)記提供的是一種逐頁控制對(duì)網(wǎng)站的訪問的方式。

舉例:

要防止所有搜索引擎將網(wǎng)站中的網(wǎng)頁編入索引,在網(wǎng)頁的

部分添加:

這里的name取值可以設(shè)置為某個(gè)搜索引擎的User-agent從而指定屏蔽某一個(gè)搜索引擎。

除了noindex外,還有其他元標(biāo)記,比如說nofollow,禁止爬蟲從此頁面中跟蹤鏈接。詳細(xì)信息可以參考Google支持的元標(biāo)記,這里提一句:noindex和nofollow在HTML 4.01規(guī)范里有描述,但是其他tag的在不同引擎支持到什么程度各不相同,還請(qǐng)讀者自行查閱各個(gè)引擎的說明文檔。

Crawl-delay

除了控制哪些可以抓哪些不能抓之外,robots.txt還可以用來控制爬蟲抓取的速率。如何做到的呢?通過設(shè)置爬蟲在兩次抓取之間等待的秒數(shù)。

Crawl-delay:5

表示本次抓取后下一次抓取前需要等待5秒。

注意:google已經(jīng)不支持這種方式了,在webmaster tools里提供了一個(gè)功能可以更直觀的控制抓取速率。

這里插一句題外話,幾年前我記得曾經(jīng)有一段時(shí)間robots.txt還支持復(fù)雜的參數(shù):Visit-time,只有在visit-time指定的時(shí)間段里,爬蟲才可以訪問;Request-rate: 用來限制URL的讀取頻率,用于控制不同的時(shí)間段采用不同的抓取速率。后來估計(jì)支持的人太少,就漸漸的廢掉了,有興趣的同學(xué)可以自行g(shù)oogle。我了解到的是目前google和baidu都已經(jīng)不支持這個(gè)規(guī)則了,其他小的引擎公司貌似從來都沒有支持過。如果確有支持那是我孤陋寡聞了,歡迎留言告知。

真的有用?

好吧,到此為止robots.txt相關(guān)的東東介紹的也七七八八了,能堅(jiān)持看到這里的同學(xué)估計(jì)都躍躍欲試了,可惜,我要潑盆冷水,能完全指望robots.txt保護(hù)我們網(wǎng)站的內(nèi)容嗎?不一定。否則百度和360就不用打官司了。

協(xié)議一致性

第一個(gè)問題是robots.txt沒有一個(gè)正式的標(biāo)準(zhǔn),各個(gè)搜索引擎都在不斷的擴(kuò)充robots.txt功能,這就導(dǎo)致每個(gè)引擎對(duì)robots.txt的支持程度各有不同,更不用說在某個(gè)功能上的具體實(shí)現(xiàn)的不同了。

緩存

第二個(gè)問題是robots.txt本身也是需要抓取的,出于效率考慮,一般爬蟲不會(huì)每次抓取網(wǎng)站網(wǎng)頁前都抓一下robots.txt,加上robots.txt更新不頻繁,內(nèi)容需要解析。通常爬蟲的做法是先抓取一次,解析后緩存下來,而且是相當(dāng)長(zhǎng)的時(shí)間。假設(shè)網(wǎng)站管理員更新了robots.txt,修改了某些規(guī)則,但是對(duì)爬蟲來說并不會(huì)立刻生效,只有當(dāng)爬蟲下次抓取robots.txt之后才能看到最新的內(nèi)容。尷尬的是,爬蟲下次抓取robots.txt的時(shí)間并不是由網(wǎng)站管理員控制的。當(dāng)然,有些搜索引擎提供了web 工具可以讓網(wǎng)站管理員通知搜索引擎那個(gè)url發(fā)生了變化,建議重新抓取。注意,此處是建議,即使你通知了搜索引擎,搜索引擎何時(shí)抓取仍然是不確定的,只是比完全不通知要好點(diǎn)。至于好多少,那就看搜索引擎的良心和技術(shù)能力了。

ignore

第三個(gè)問題,不知是無意還是有意,反正有些爬蟲不太遵守或者完全忽略robots.txt,不排除開發(fā)人員能力的問題,比如說根本不知道robots.txt。另外,本身robots.txt不是一種強(qiáng)制措施,如果網(wǎng)站有數(shù)據(jù)需要保密,必需采取技術(shù)措施,比如說:用戶驗(yàn)證,加密,ip攔截,訪問頻率控制等。

偷偷的抓

第四個(gè)問題,即使采用了種種限制,仍然存在某些惡意的抓取行為能突破這些限制,比如一些利用肉雞進(jìn)行的抓取。悲觀的說,只要普通用戶可以訪問,就不能完全杜絕這種惡意抓取的行為。但是,可以通過種種手段使抓取的代價(jià)增大到讓對(duì)方無法接受。比如說:Captcha, Ajax用戶行為驅(qū)動(dòng)的異步加載等等。這個(gè)就不屬于本文討論的范疇了。

泄密

最后,robots.txt本身還存在泄密的風(fēng)險(xiǎn)。舉例,如果某一個(gè)網(wǎng)站的robots.txt里突然新增了一條:Disallow /map/,你想到了什么?是不是要推出地圖服務(wù)了?于是有好奇心的同學(xué)就會(huì)開始嘗試各種文件名去訪問該路徑下的文件,希望能看到驚喜。貌似當(dāng)初google的地圖就是這么被提前爆出來的,關(guān)于這點(diǎn)我不太確定,大家就當(dāng)八卦聽聽好了。

工具

google webmaster tools

robots.txt生成工具

Perl robots.txt解析器

Python robots.txt解析器

SEO專題推薦:

關(guān)鍵詞優(yōu)化專題:網(wǎng)站關(guān)鍵詞優(yōu)化沒效果?來這里學(xué)習(xí)最實(shí)用的關(guān)鍵詞優(yōu)化技巧!

內(nèi)鏈優(yōu)化專題:最能提升網(wǎng)站權(quán)重的內(nèi)鏈部署優(yōu)化技巧與方法

外鏈建設(shè)專題:高質(zhì)量自然外鏈怎么做?讀完這些你將質(zhì)的飛躍

網(wǎng)站降權(quán)專題:2015年最有用的網(wǎng)站降權(quán)、被K、被黑、被攻擊的解決方法

用戶體驗(yàn)專題:學(xué)習(xí)完這些,作為站長(zhǎng)的你可以秒懂如何做網(wǎng)站用戶體驗(yàn)

行業(yè)網(wǎng)站專題:優(yōu)化行業(yè)網(wǎng)站的“葵花寶典”看完后無優(yōu)化壓力

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)標(biāo)簽
robots標(biāo)簽

相關(guān)文章

  • robots具體應(yīng)該禁止些什么文件

    今天大概總結(jié)一下:首先說明一點(diǎn):每天百度派出的蜘蛛是有限的,robots寫出來是為了節(jié)省蜘蛛資源讓蜘蛛能更快的進(jìn)行有效爬取和收錄!

  • 你不知道的robots文件那些事

    實(shí)際上百度只是擔(dān)心由于網(wǎng)站管理員不懂得robots.txt語法,導(dǎo)致搜索引擎蜘蛛無法正常抓取網(wǎng)站,才這樣寫的。建立robots.txt文件還是必需的,哪怕這個(gè)robots.txt文件是一個(gè)空白的文本文檔都可以。因?yàn)槲覀兊木W(wǎng)站畢竟不是僅僅會(huì)被百度收錄,同時(shí)也會(huì)被其他搜索引擎收錄,上傳一個(gè)空白的robo

    標(biāo)簽:
    robots標(biāo)簽
    robots
  • 解除網(wǎng)站Robots封禁全過程

    obots協(xié)議或者說robots文件對(duì)搜索引擎優(yōu)化中非常重要,但設(shè)置出錯(cuò)可能會(huì)導(dǎo)致收錄下降或不能正常收錄。今天,小小課堂SEO自學(xué)網(wǎng)帶來的是《【robots文件協(xié)議】解除Robots封禁全過程》。希望本次的百度SEO優(yōu)化培訓(xùn)對(duì)大家有所幫助。

  • 熊掌號(hào)必備seo知識(shí)1:robots文件

    最近很多站長(zhǎng)咨詢關(guān)于熊掌號(hào)的問題,包括熊掌號(hào)和傳統(tǒng)seo之間的關(guān)系等,熊掌號(hào)在給網(wǎng)站提供更多的品牌特型、內(nèi)容保護(hù)之外,是否會(huì)遵循seo的基礎(chǔ)原理呢?曲曲小姐姐將在以后給大家逐一分享。

  • 網(wǎng)站上線前把robots寫了所有蜘蛛禁止抓取,取消后還是這樣怎么辦

    不知道有沒有其他站長(zhǎng)跟我一樣,技術(shù)部把網(wǎng)站后臺(tái)搭建好了,然后網(wǎng)站還是很多東西需要修改的,特別是TDK改了一遍又一遍,但是這時(shí)候我沒有去百度站長(zhǎng)申請(qǐng)閉站保護(hù),卻是在網(wǎng)站根目錄上傳了robots文件,里面寫著:User-agent:*Disallow:/這表示我的網(wǎng)站禁止所有蜘蛛來抓取,那么這種情況有什

    標(biāo)簽:
    robots標(biāo)簽
    robots

熱門排行

信息推薦