我正在为我的用户构建统计信息,并且不希望机器人的访问被计算在内。
现在我有一个基本的php,每次调用页面时mysql都会增加1。
但机器人也被添加到计数中。
有人能想出办法吗?
主要是那些搞乱的主要因素。谷歌,雅虎,Msn等
答案 0 :(得分:23)
您可以检查用户代理字符串,空字符串或包含'robot','spider','crawler','curl'的字符串可能是机器人。
preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));
答案 1 :(得分:9)
您应该按用户代理字符串进行过滤。你可以在这里找到一个由机器人给出的大约300个常见用户代理的列表:http://www.robotstxt.org/db.html在运行SQL语句之前运行该列表并忽略bot用户代理应该可以解决所有实际问题。
如果您不希望搜索引擎甚至到达该页面,请使用基本的robots.txt文件来阻止它们。
答案 2 :(得分:6)
我们有一个类似的用例,我们最近发现一个非常有用的选项是来自UASParser class的user-agent-string.info。
这是一个PHP类,它提取最新的用户代理字符串定义集并在本地缓存它们。可以将类配置为根据您的需要经常或很少地提取定义。像这样自动获取它们意味着您不必继续对bot用户代理或市场上出现的新代理进行各种更改,尽管您依靠UAS.info来准确地执行此操作。
当调用类时,它会解析当前访问者的用户代理并返回一个关联数组,从而突破组成部分,例如
Array
(
[typ] => browser
[ua_family] => Firefox
[ua_name] => Firefox 3.0.8
[ua_url] => http://www.mozilla.org/products/firefox/
[ua_company] => Mozilla Foundation
........
[os_company] => Microsoft Corporation.
[os_company_url] => http://www.microsoft.com/
[os_icon] => windowsxp.png
)
当UA被识别为可能属于人类访问者时,字段typ
设置为browser
,在这种情况下,您可以更新统计信息。
这里有几点需要注意:
答案 3 :(得分:2)
在递增页面查看次数之前检查user agent,但请记住这可能是欺骗性的。 PHP在$_SERVER['HTTP_USER_AGENT']
中公开用户代理,假设Web服务器为其提供此信息。有关$_SERVER
的更多信息,请访问http://www.php.net/manual/en/reserved.variables.server.php。
您可以在http://www.user-agents.org找到用户代理列表;谷歌搜索还将提供属于主要提供商的名称。第三个可能的来源是您的Web服务器的访问日志,如果您可以聚合它们。
答案 4 :(得分:0)
您是否尝试通过其用户代理信息识别它们?一个简单的谷歌搜索应该为您提供谷歌等使用的用户代理。
当然,这并非万无一失,但主要公司的大多数抓取工具都提供了独特的用户代理。
编辑:假设您不想限制机器人访问权限,但只是不计算其在您的统计信息中的访问权。
答案 5 :(得分:0)
100%工作机器人检测器。它正在我的网站上工作,可以检测机器人,爬行器,蜘蛛和复印机。
function isBotDetected() {
if ( preg_match('/abacho|accona|AddThis|AdsBot|ahoy|AhrefsBot|AISearchBot|alexa|altavista|anthill|appie|applebot|arale|araneo|AraybOt|ariadne|arks|aspseek|ATN_Worldwide|Atomz|baiduspider|baidu|bbot|bingbot|bing|Bjaaland|BlackWidow|BotLink|bot|boxseabot|bspider|calif|CCBot|ChinaClaw|christcrawler|CMC\/0\.01|combine|confuzzledbot|contaxe|CoolBot|cosmos|crawler|crawlpaper|crawl|curl|cusco|cyberspyder|cydralspider|dataprovider|digger|DIIbot|DotBot|downloadexpress|DragonBot|DuckDuckBot|dwcp|EasouSpider|ebiness|ecollector|elfinbot|esculapio|ESI|esther|eStyle|Ezooms|facebookexternalhit|facebook|facebot|fastcrawler|FatBot|FDSE|FELIX IDE|fetch|fido|find|Firefly|fouineur|Freecrawl|froogle|gammaSpider|gazz|gcreep|geona|Getterrobo-Plus|get|girafabot|golem|googlebot|\-google|grabber|GrabNet|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|HTTrack|ia_archiver|iajabot|IDBot|Informant|InfoSeek|InfoSpiders|INGRID\/0\.1|inktomi|inspectorwww|Internet Cruiser Robot|irobot|Iron33|JBot|jcrawler|Jeeves|jobo|KDD\-Explorer|KIT\-Fireball|ko_yappo_robot|label\-grabber|larbin|legs|libwww-perl|linkedin|Linkidator|linkwalker|Lockon|logo_gif_crawler|Lycos|m2e|majesticsEO|marvin|mattie|mediafox|mediapartners|MerzScope|MindCrawler|MJ12bot|mod_pagespeed|moget|Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|NationalDirectory|naverbot|NEC\-MeshExplorer|NetcraftSurveyAgent|NetScoop|NetSeer|newscan\-online|nil|none|Nutch|ObjectsSearch|Occam|openstat.ru\/Bot|packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pingdom|pinterest|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|rambler|Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Scrubby|Search\-AU|searchprocess|search|SemrushBot|Senrigan|seznambot|Shagseeker|sharp\-info\-agent|sift|SimBot|Site Valet|SiteSucker|skymob|SLCrawler\/2\.0|slurp|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|spider|suke|tach_bw|TechBOT|TechnoratiSnoop|templeton|teoma|titin|topiclink|twitterbot|twitter|UdmSearch|Ukonline|UnwindFetchor|URL_Spider_SQL|urlck|urlresolver|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|wapspider|WebBandit\/1\.0|webcatcher|WebCopier|WebFindBot|WebLeacher|WebMechanic|WebMoose|webquest|webreaper|webspider|webs|WebWalker|WebZip|wget|whowhere|winona|wlm|WOLP|woriobot|WWWC|XGET|xing|yahoo|YandexBot|YandexMobileBot|yandex|yeti|Zeus/i', $_SERVER['HTTP_USER_AGENT'])
) {
return true; // 'Above given bots detected'
}
return false;
} // End :: isBotDetected()
答案 6 :(得分:0)
此功能对我有用,我在https://www.cult-f.net/detect-crawlers-with-php/网站上找到了
<?php
$crawlers = array(
'Google'=>'Google',
'MSN' => 'msnbot',
'Rambler'=>'Rambler',
'Yahoo'=> 'Yahoo',
'AbachoBOT'=> 'AbachoBOT',
'accoona'=> 'Accoona',
'AcoiRobot'=> 'AcoiRobot',
'ASPSeek'=> 'ASPSeek',
'CrocCrawler'=> 'CrocCrawler',
'Dumbot'=> 'Dumbot',
'FAST-WebCrawler'=> 'FAST-WebCrawler',
'GeonaBot'=> 'GeonaBot',
'Gigabot'=> 'Gigabot',
'Lycos spider'=> 'Lycos',
'MSRBOT'=> 'MSRBOT',
'Altavista robot'=> 'Scooter',
'AltaVista robot'=> 'Altavista',
'ID-Search Bot'=> 'IDBot',
'eStyle Bot'=> 'eStyle',
'Scrubby robot'=> 'Scrubby',
);
function crawlerDetect($USER_AGENT)
{
// to get crawlers string used in function uncomment it
// it is better to save it in string than use implode every time
// global $crawlers
// $crawlers_agents = implode('|',$crawlers);
$crawlers_agents = 'Google|msnbot|Rambler|Yahoo|AbachoBOT|accoona|AcioRobot|ASPSeek|CocoCrawler|Dumbot|FAST-WebCrawler|GeonaBot|Gigabot|Lycos|MSRBOT|Scooter|AltaVista|IDBot|eStyle|Scrubby';
if ( strpos($crawlers_agents , $USER_AGENT) === false )
return false;
// crawler detected
// you can use it to return its name
/*
else {
return array_search($USER_AGENT, $crawlers);
}
*/
}
// example
$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
if ($crawler )
{
// it is crawler, it's name in $crawler variable
}
else
{
// usual visitor
}