有的时候我们需要针对搜索引擎抓取做一些特殊的回应、所以要用到判断是否为搜索引擎的方法,我在网上找了几种来做个笔记,就先不验证效果了。
第一种
来源:php判断是否搜索引擎 – php
function strexists($haystack, $needle) {
return !(strpos($haystack, $needle) === FALSE);
}
/*
*检验搜索
*/
function getrobot() {
if(!defined('IS_ROBOT')) {
$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
if(!strexists($_SERVER['HTTP_USER_AGENT'], 'http://') && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {
define('IS_ROBOT', FALSE);
} elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {
define('IS_ROBOT', TRUE);
} else {
define('IS_ROBOT', FALSE);
}
}
return IS_ROBOT;
}
看代码这一种方法是判断来访者是不是某一种浏览器,如果是的话就判断为用户,不是的话就判断为蜘蛛。
第二种
来源:PHP判断搜索引擎来路跳转代码 – 搜索优化 – 红黑联盟
[略修改]
<?php
$flag = false;
$tmp = $_SERVER['HTTP_USER_AGENT'];
if(strpos($tmp, ‘Googlebot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Baiduspider’) >0){
$flag = true;
} else if(strpos($tmp, ‘Yahoo! Slurp’) !== false){
$flag = true;
} else if(strpos($tmp, ‘msnbot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Sosospider’) !== false){
$flag = true;
} else if(strpos($tmp, ‘YodaoBot’) !== false || strpos($tmp, ‘OutfoxBot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Sogou web spider’) !== false || strpos($tmp, ‘Sogou Orion spider’) !== false){
$flag = true;
} else if(strpos($tmp, ‘fast-webcrawler’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Gaisbot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘ia_archiver’) !== false){
$flag = true;
} else if(strpos($tmp, ‘altavista’) !== false){
$flag = true;
} else if(strpos($tmp, ‘lycos_spider’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Inktomi slurp’) !== false){
$flag = true;
}
if($flag == false){
header(“Location: 正常访问地址”);
exit();
}
else
{
//做点什么事反馈搜索引擎
}
这种方法很明显就是匹配搜索引擎列表
第三种
来源:php 判断是否为搜索引擎蜘蛛 转载 – 龙圆 – 博客园(由于来源博主没有指明更早来源,所以不能找到最初来源)
function isCrawler() {
$agent= strtolower($_SERVER['HTTP_USER_AGENT']);
if (!empty($agent)) {
$spiderSite= array(
"TencentTraveler",
"Baiduspider+",
"BaiduGame",
"Googlebot",
"msnbot",
"Sosospider+",
"Sogou web spider",
"ia_archiver",
"Yahoo! Slurp",
"YoudaoBot",
"Yahoo Slurp",
"MSNBot",
"Java (Often spam bot)",
"BaiDuSpider",
"Voila",
"Yandex bot",
"BSpider",
"twiceler",
"Sogou Spider",
"Speedy Spider",
"Google AdSense",
"Heritrix",
"Python-urllib",
"Alexa (IA Archiver)",
"Ask",
"Exabot",
"Custo",
"OutfoxBot/YodaoBot",
"yacy",
"SurveyBot",
"legs",
"lwp-trivial",
"Nutch",
"StackRambler",
"The web archive (IA Archiver)",
"Perl tool",
"MJ12bot",
"Netcraft",
"MSIECrawler",
"WGet tools",
"larbin",
"Fish search",
);
foreach($spiderSite as $val) {
$str = strtolower($val);
if (strpos($agent, $str) !== false) {
return true;
}
}
} else {
return false;
}
}
这个方法看起来和上一种类似,只是包含的搜索引擎更多。。
本文发布于 https://luojia.me
本站文章未经文下加注授权不得拷贝发布。