检测访问者是浏览器而不是爬虫

检测访问者是浏览器而不是爬虫

问题描述:

如果网页的用户是浏览器,服务器端如何检测?检测访问者是浏览器而不是爬虫

检测到这个的原因是,我存储有关访问页面的统计信息,并且我不想在用户是爬虫时存储任何统计信息。所以我不试图去检测哪个浏览器厂商。我只想要一个布尔型答案,用户是浏览器。

我假设答案与用户代理标题相关,但许多可能的值对我来说太难以理解了。 我如何检测它? 90%的解决方案,我只检测最受欢迎的Top5流行浏览器就足够了。

我正在使用C#ASP.Net,但我想其他语言和框架中的大多数解决方案都可以被翻译。

+4

据我了解,用户是人,这是使用的浏览器。所以用户永远不是浏览器。你的意思是你如何检测浏览器用户使用的是什么? – simon 2009-10-08 12:50:30

+3

“我不是浏览器,我是自由人!” user-> get(coat);用户 - >穿(外套);用户 - >退出(房间); – Skizz 2009-10-08 12:56:18

+2

请参阅“检测诚实的网络爬虫”http://stackoverflow.com/questions/544450/detecting-honest-web-crawlers – Arjan 2009-10-08 13:08:56

此代码绝不是详尽的,但给你一个基本的PHP创建。我不能保证少数人不会漏网,但这应该会吸引大多数浏览器并忽略大多数漫游器。

<?php 
// Regular expression to match common browsers 
$browserlist = '/(opera|aol|msie|firefox|chrome|konqueror|safari|netscape|navigator|mosaic|lynx|amaya|omniweb|avant|camino|flock|seamonkey|mozilla|gecko)+/i'; 

// Test for browsers 
if (preg_match($browserlist, $_SERVER['HTTP_USER_AGENT'])) { 
    // ...is a browser 
} else { 
    // ...is not a browser 
} 
?> 
+0

在preg比赛结束时是否应该没有'i',以使其不区分大小写? – zaf 2011-04-21 08:54:44

+0

非常好的一点!我错过了,因为我通常首先使用用户代理程序“strtolower”。刚刚修复 – Rowan 2011-04-25 10:59:06

+3

我不认为这会起作用,所有的用户代理都以Mozilla(冗长而悲伤的故事)开头,其中包括许多爬虫。 – 2012-02-28 17:09:55

如果您使用PHP,请尝试$_SERVER['HTTP_USER_AGENT']get_browser()函数。

Here's a class这是可供下载,使这个过程非常容易。用法示例:

$browser = new Browser(); 
if($browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2) { 
echo 'You have FireFox version 2 or greater'; 
} 
+0

这是一个非常好的类。易于集成和使用,以及良好的功能。真的很有用,我使用它来检测传入的Internet爬虫机器人,并很容易地完成工作。 – 2010-03-31 12:05:39

如果您需要决定是否返回(说)的脚本与HTML原始文本的浏览器,也许你应该检查Accept-Encoding请求头?

Perl有一个模块HTTP::BrowserDetect。根据文档,这有一个方法来检查用户代理是否是机器人。我想,任何不是机器人的东西都可能是一个浏览器。

+0

我认为他们的浏览器,无论是Firefox,IE等浏览器和机器人,因为他们都浏览器页面。只是我的观点。 – 2010-03-31 12:08:50

我不知道你为什么这样做。

但是,您甚至不想假装您可以根据User-agent标题在人类与机器人之间辨别。您可能能够成功分析请求的模式和时间。

这会给你99%的准确度。

Regex.IsMatch(Request.UserAgent, @"bot|crawler|baiduspider|80legs|ia_archiver|voyager|curl|wget|yahoo! slurp|mediapartners-google", RegexOptions.IgnoreCase); 

我在这里我的答案列出更多的解决方案:

Detecting honest web crawlers