检测访问者是浏览器而不是爬虫
如果网页的用户是浏览器,服务器端如何检测?检测访问者是浏览器而不是爬虫
检测到这个的原因是,我存储有关访问页面的统计信息,并且我不想在用户是爬虫时存储任何统计信息。所以我不试图去检测哪个浏览器厂商。我只想要一个布尔型答案,用户是浏览器。
我假设答案与用户代理标题相关,但许多可能的值对我来说太难以理解了。 我如何检测它? 90%的解决方案,我只检测最受欢迎的Top5流行浏览器就足够了。
我正在使用C#ASP.Net,但我想其他语言和框架中的大多数解决方案都可以被翻译。
此代码绝不是详尽的,但给你一个基本的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
}
?>
如果您使用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';
}
这是一个非常好的类。易于集成和使用,以及良好的功能。真的很有用,我使用它来检测传入的Internet爬虫机器人,并很容易地完成工作。 – 2010-03-31 12:05:39
Perl有一个模块HTTP::BrowserDetect。根据文档,这有一个方法来检查用户代理是否是机器人。我想,任何不是机器人的东西都可能是一个浏览器。
我认为他们的浏览器,无论是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);
我在这里我的答案列出更多的解决方案:
据我了解,用户是人,这是使用的浏览器。所以用户永远不是浏览器。你的意思是你如何检测浏览器用户使用的是什么? – simon 2009-10-08 12:50:30
“我不是浏览器,我是自由人!” user-> get(coat);用户 - >穿(外套);用户 - >退出(房间); – Skizz 2009-10-08 12:56:18
请参阅“检测诚实的网络爬虫”http://stackoverflow.com/questions/544450/detecting-honest-web-crawlers – Arjan 2009-10-08 13:08:56