2011-05-04 74 views

回答

12

機器人需要(通過常識/禮儀比任何類型的法律)沿用戶代理髮送請求。您可以使用request.env["HTTP_USER_AGENT"]來檢查這一點,並按照您的要求過濾。

+0

由於瑞恩,是我使機器人用戶代理等的數組:AM_I_ROBOT = [ 「的googlebot」, 「twitterbot」, 「facebookexternalhit」,「http://www.google .com/bot.html「, 」http://www.facebook.com/externalhit_uatext.php「, 」tweetmemebot「,」sitebot「,」msnbot「,」robot「,」bot「] – 2011-05-05 06:52:27

+0

這裏是一個列表的用戶代理: http://www.user-agents.org/使用XML提要: http://www.user-agents.org/allagents.xml – 2011-08-02 23:26:27

+1

此要點提取所有搜索引擎機器人的名稱和SP來自user-agents.org的ammers並將它們拋入一個數組中:https://gist.github.com/1121578 這是一個很長的列表。 – 2011-08-03 00:13:46

27

由於表現良好機器人至少典型地包括在UA字符串的引用URI他們發送,類似:

request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/) 

是一種簡單的方法,以查看是否該請求是從一個機器人對人類用戶的代理。這似乎比試圖與全面的列表匹配更強大。

+1

+1然而,對於這個聰明的解決方案,請記住,Twitter不遵循此規則,請改用request.env [「HTTP_USER_AGENT」]。match(/Twitterbot\/1.0/)'。 – 2014-05-21 09:59:07

+0

雖然這可能是一個聰明的解決方案,以捕捉大多數搜索引擎機器人,它是不可維護的,很可能會錯過許多機器人 – 2017-03-06 10:30:31

8

我認爲你可以使用瀏覽器寶石檢查機器人。

if browser.bot? 
    # code here 
end 

https://github.com/fnando/browser

+0

雖然這個鏈接可能回答這個問題,最好在這裏包括答案的基本部分,並提供鏈接供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/11097150) – 2016-02-01 04:26:31

+0

感謝@ pardeep-dhingra,我只是改變它 – dimasjt 2016-02-01 08:03:32

+0

這個解決方案適合我,謝謝! – 2017-06-24 14:44:14

相關問題