為什麼必應完全不遵守Robots協議?

360、搜狗這種不要臉的垃圾也就算了(百度偶爾遵守偶爾不遵守),必應作為微軟出品的搜索引擎為何也不遵守行業規範?

百度網盤:

華住酒店:

是因為必應的爬蟲不支持「Disallow:/」么?


先問是不是,再問為什麼。答案是他們的 robots.txt 都寫錯了。必應是遵守了 The Robots Exclusion Protocol 的。

遵守或者不遵守本來就是無所謂的。這又不是什麼行業標準。這協議連道德標準都算不上。

先說 robots.txt 該怎麼寫

以下引用自 The Web Robots Pages

What to put in itThe "/robots.txt" file is a text file, with one or more records. Usually contains a single record looking like this:

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/

In this example, three directories are excluded.

Note that you need a separate "Disallow" line for every URL prefix you want to exclude -- you cannot say "Disallow: /cgi-bin/ /tmp/" on a single line. Also, you may not have blank lines in a record, as they are used to delimit multiple records.

Note also that globbing and regular expression are not supported in either the User-agent or Disallow lines. The "*" in the User-agent field is a special value meaning "any robot". Specifically, you cannot have lines like "User-agent: *bot*", "Disallow: /tmp/*" or "Disallow: *.gif".

大概就是每個記錄為一塊,允許多個記錄。每個記錄包含 User-agent 欄位和 Disallow 欄位。每個 Disallow 欄位要另起一行。每個記錄裡面不許有空行。空行用來分割不同的記錄。還有, 這兩個欄位均不支持通配符

結合上文分析可知。

一、華住酒店的 robots.txt 是表意錯了。華住本意是想不被任何 robot 索引到,所以使用了通配符。但是此協議不支持通配符。所以這個 robots.txt 的意思是不許任何 robot 索引 /*?* 這個文件(更正2,應該是不允許索引以 http://huazhu.com/*?* 為開頭的任何路徑)。事實是,必應,谷歌,百度均未索引此文件。

二、http://pan.baidu.com 下的 robots.txt 是這樣要求必應爬蟲的:

User-agent: MSNBot
Disallow: /enterprise/
Disallow: /share/link/
Disallow: /wap/link/
Disallow: /share/home/
Disallow: /wap/share/home/
Disallow: /s/1*

也就是說不許索引這些目錄下的任何文件。當然,最後一個 Disallow 欄位的意思是不許索引 http://pan.baidu.com/s/ 這個目錄下名字為 1* 的這個文件,這是一個沒有擴展名的文件。(更正2,應該是不允許索引以 http://pan.baidu.com/s/1* 為開頭的任何路徑)

再反觀題主圖中的鏈接,就可以發現確實是按照要求做的。同樣,谷歌,百度也都按要求做了。而且,百度網盤要求其他所有的爬蟲不許抓取任何頁面,我拿 Yandex 實測了以下,發現 Yandex 也按照要求做了。

網路爬蟲:自己把 robots.txt 寫錯了。怪我嘍?

五分鐘小課堂結束,下面是來挑刺環節。

(圖片無法上傳,貴乎吃棗藥丸)

截圖打包在此 https://1drv.ms/f/s!AmsvcpTR0Tqe3MkrHGGBTqJ5ChsJlA

要說的是,http://zhihu.com/robots.txt 的錯誤是在 Disallow 欄位打算使用通配符,望改正。

http://taobao.com 和 http://weibo.com 下的 robots.txt 已經不可救藥了,推倒重來吧。(更正,這句話里犯了個錯誤。我在 Edge 瀏覽器下打開這兩個文件,發現都沒有換行,便誤以為這兩個都是寫錯的。答主出錯的原因是「 Linux 的換行符和 Windows 下是不一樣的」。http://taobao.com 的 robots.txt 是符合 Linux 標準的,使用的 LF 進行換行。然而,http://weibo.com 的 robots.txt 沒用空白行分隔每個記錄,而且換行符是 Mixed ,同時用了 LF 和 CR LF 來換行,不是很懂,等大神指正。)

更正2 的依據在此:Performance, Implementation, and Design Notes

The "Disallow" field specifies a partial URI that is not to be visited. This can be a full path, or a partial path; any URI that starts with this value will not be retrieved. For example,

Disallow: /help disallows both /help.html and /help/index.html, whereas
Disallow: /help/ would disallow /help/index.html but allow /help.html.


Google了一下,並沒有什麼不同。我只能善意的推斷,他們的Robots寫錯了。。。


不是必應不遵守,是 robots.txt 寫錯了。

另外,反對 @李哲 的說法。

robots.txt 協議不是法律法規,也不是行業規範,這沒錯。但是一個搜索引擎聲稱自己遵守 robots.txt 協議那就有道德責任遵守。

說遵守不遵守無所謂是不對的,哪怕是百度這樣無底線的搜索引擎也不敢這樣亂來。

——————————————————————————

很多時候搜索引擎抓取了你 robots.txt 不允許抓取的內容不是因為機器人不遵守,而是從抓取到索引到展現這個過程需要一段時間,當搜索引擎已經抓取了,你才更新,那麼之前抓取的是不會那麼快刪掉的。

下面說下幾個新手可能會需要的信息。

1、robots.txt 怎麼寫?

各大搜索引擎的站長平台(英文叫 webmasters )都有詳細說明,也有生成工具。

2、怎樣確定 robots.txt 有效?

站長平台都有抓取 robots.txt 的工具,也會有「抓取工具」來確認某個頁面是不是可以正確抓取。

3、怎樣通知搜索引擎 robots.txt 已更新?

和上面的一樣,通過站長平台的抓取工具重新抓取(有的是「更新」)即可。

4、讓搜索引擎抓取了不應該抓取的內容怎麼辦?

這個常用方法有幾種:

* 在站長平台的刪除鏈接工具中輸入鏈接並確認刪除

* 修改代碼使搜索引擎訪問時返回錯誤代碼(503、404等),然後在站長平台重新抓取

* 修改 robots.txt (這個只建議在上面兩個操作過之後補充)

5、整站禁止抓取,如何操作更有效?

有的搜索引擎索引是不遵守 robots.txt 的,只有在展現的時候遵守,也就是說,就算你 robots.txt 寫明了禁止抓取,你會發現還是有機器人來爬。

所以如果是大目錄或者是整站禁止抓取,建議在伺服器軟體(如 nginx)的代碼段中直接判斷搜索引擎 UA 並返回錯誤代碼。這樣一方面可以減輕伺服器壓力,一方面可以真正禁止抓取。


記得360指控百度不正當競爭的時候說的是百度允許別的所有搜索引擎索引,唯獨不讓360搜索索引


bing按照功能區分有不同的agent,要是真的不想讓bing抓,就全部寫一遍,MSNBot是不夠的。


推薦閱讀:

如何評價微軟 11 月 13 日宣布 .Net 核心運行庫開源並跨平台運行?
招行總行信息技術部和微軟北京,應該選哪個 offer?
如何看待微軟成為Github上開源貢獻者最多的公司?
請問光暈系列遊戲中士官長的「雷神之錘」具體屬於什麼類型的盔甲?是單兵的全套防彈裝甲還是動力裝甲呢?
Microsoft Edge為什麼沒有全屏模式?

TAG:微軟Microsoft | 必應Bing | robotstxt | 搜索引擎 |