Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?

我有Rails应用程序,记录从每个请求到特定URL的IP地址,但在我的IP数据库中,我发现facebook blok IP如66.220.15。*和Google IP(我建议它来自bot)。 是否有任何公式可以通过机器人或搜索引擎蜘蛛来确定请求中的IP? 谢谢

机器人需要(通过常识/礼貌比任何类型的法律更多)向用户代理发送他们的请求。 您可以使用request.env["HTTP_USER_AGENT"]进行检查,并根据需要进行过滤。

由于表现良好的机器人至少通常在它们发送的UA字符串中包含引用URI,例如:

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

是一种简单的方法,可以查看请求是来自机器人与人类用户的代理。 这似乎比尝试匹配综合列表更强大。

我认为你可以使用浏览器gem检查机器人。

 if browser.bot? # code here end 

https://github.com/fnando/browser

另一种方法是使用crawler_detect gem:

 CrawlerDetect.is_crawler?("Bot user agent") => true #or after adding Rack::Request extension request.is_crawler? => true 

如果要检测各种不同的机器人(超过1000个),它会很有用。