2013-08-02 52 views
1

當抓取工具讀取robots.txt文件的User-Agent行時,是否嘗試將其與其自己的User-Agent完全匹配,或者是否嘗試將其作爲其User-Agent的子字符串進行匹配?robots.txt中的User-Agent行是完全匹配還是子字符串匹配?

我讀過的一切都沒有明確地回答這個問題。根據另一個StackOverflow thread這是一個完全匹配。

但是,RFC draft讓我相信它是一個子串匹配。例如,「User-Agent:Google」將匹配「Googlebot」和「Googlebot-News」。下面是從RFC相關報價:

機器人必須服從於/robots.txt的第一條記錄包含user-agent行值中包含機器人作爲一個子字符串的名稱標記。

此外,在 「優先級的用戶代理的秩序」 Googlebot的documentation的部分它解釋說,用戶代理谷歌圖片 「的Googlebot圖片/ 1.0」 匹配 「的User-Agent:Googlebot的」 。

我希望這裏有任何澄清,答案可能比我的問題更復雜。例如,Eugene Kalinin的節點機器人模塊提到將用戶代理拆分爲line 29上的「名稱標記」並與之匹配。如果是這樣,那麼Googlebot's User-Agent「Mozilla/5.0(compatible; Googlebot/2.1; + http://www.google.com/bot.html)」將不匹配「User-Agent:Googlebot」。

回答

2

original robots.txt specification (from 1994),它說:

用戶代理

[...]

的機器人應該是在解釋該字段寬鬆。推薦使用不帶版本信息的名稱不區分大小寫的子字符串匹配。

[...]

如果和機器人/解析器遵守,這是另一個問題,不能一般的回答。

+0

這是一個艱難的決定。我非常喜歡plasticinsect的答案,但我認爲這是最「正確的」。這聽起來像抓取工具應閱讀robots.txt用戶代理行作爲不區分大小寫的子字符串匹配,但每個應用他們自己的規則,如plasticinsect說。 – josephdpurcell

2

每個機器人都會有所不同。實際上,沒有一種可靠的方法可以將robots.txt中的用戶代理映射到請求頭中發送的用戶代理。最安全的做法是將它們視爲兩個獨立的任意字符串。 查找robots.txt用戶代理的唯一可靠方法是閱讀給定機器人的官方文檔。

編輯:

最好的辦法通常是閱讀給定的機器人的官方文檔,但即使這是不是100%準確。正如邁克爾馬爾指出的那樣,谷歌有一個robots.txt測試工具,可以用來驗證哪個UA可以與給定的機器人一起工作。該工具顯示其文檔不準確。具體來說,頁面https://developers.google.com/webmasters/control-crawl-index/docs/聲稱他們的媒體合作伙伴機器人對「Googlebot」UA作出了迴應,但該工具表明他們沒有。

+2

「找到robots.txt用戶代理的唯一100%可靠的方法是閱讀給定機器人的官方文檔。」 < - 這。 RE:Google,您可以訪問網站管理員工具並抓取>封鎖的網址來測試各種用戶代理和路徑,以瞭解Google如何特別對待用戶代理字符串。我做到了這一點,並且看到「User-Agent:Google」沒有任何匹配(根據工具),並且正如您所引用的,Googlebot與他們的常規漫遊器,圖片漫遊器和移動漫遊器相匹配 - 但它們與他們的廣告和媒體合作伙伴機器人。至少在谷歌的實施中,UA不是正則表達式,而是關鍵字。 –

+0

@邁克爾馬爾 - 是的,你有一個觀點。我嘗試了你的實驗並得到了相同的結果。最糟糕的是,這實際上與官方文件相矛盾。顯然這些文檔已經過時了。我編輯了我的答案。 – plasticinsect