【发布时间】:2009-07-20 16:03:35
【问题描述】:
有什么方法可以检测我网站上的搜索引擎或爬虫。 我在管理员的 phpBB 中看到我们可以看到并允许搜索引擎,我们还可以看到机器人的最后一次访问(如 Google Bot)。
PHP 中有任何脚本吗? 不是 Google Analytic 或同类应用程序。 我需要为我的博客网站实现这一点,我认为有什么方法可以找到?
【问题讨论】:
标签: php web-crawler
有什么方法可以检测我网站上的搜索引擎或爬虫。 我在管理员的 phpBB 中看到我们可以看到并允许搜索引擎,我们还可以看到机器人的最后一次访问(如 Google Bot)。
PHP 中有任何脚本吗? 不是 Google Analytic 或同类应用程序。 我需要为我的博客网站实现这一点,我认为有什么方法可以找到?
【问题讨论】:
标签: php web-crawler
您可以使用机器人或网络浏览器发送给您的 IP 地址或“用户代理”字符串。
当 Googlebot(或大多数其他行为良好的机器人)访问您的网站时,它们会向您发送一个 $_SERVER['HTTP_USER_AGENT'] 变量来标识它们是什么。一些例子是:
Googlebot/2.1 (+http://www.google.com/bot.html)
NutchCVS/0.8-dev (Nutch;http://lucene.apache.org/nutch/bot.html
百度蜘蛛+(+http://www.baidu.com/search/spider_jp.html)
Mozilla/5.0(X11;U;Linux i686;en-US)AppleWebKit/531.4(KHTML,如 Gecko)
您可以在这些网站上找到更多示例: link text link text
然后您可以使用 PHP 检查这些用户代理字符串并确定用户是否是搜索引擎。我经常使用这样的东西:
$searchengines = array(
'Googlebot',
'Slurp',
'search.msn.com',
'nutch',
'simpy',
'bot',
'ASPSeek',
'crawler',
'msnbot',
'Libwww-perl',
'FAST',
'Baidu',
);
$is_se = false;
foreach ($searchengines as $searchengine){
if (!empty($_SERVER['HTTP_USER_AGENT']) and
false !== strpos(strtolower($_SERVER['HTTP_USER_AGENT']), strtolower($searchengine)))
{
$is_se = true;
break;
}
}
if ($is_se) { print('Its a search engine!'); }
请记住,任何检测方法(Google Analytics(分析)或其他统计数据包或其他)都不会 100% 准确。一些网络浏览器允许您设置自定义用户代理字符串,而一些行为不端的网络爬虫可能根本不会发送用户代理字符串。不过,这种方法可能对 95% 以上的爬虫/访问者有效。
【讨论】:
您可以尝试使用它们的用户代理字符串来检测它们。可以在此处找到它们的列表:http://www.botsvsbrowsers.com/
搜索引擎倾向于使用爬虫和机器人这两个词。
搜索引擎几乎是唯一访问robots.txt的互联网用户。
有些 IP 是已知的机器人,例如 GoogleBot。
【讨论】:
使用Piwik Device Detector library。
它会自动检测a plethora of bots 和自动监控服务。
【讨论】:
Google Analytics(分析)可让您查看您网站的抓取统计信息。
【讨论】: