AFAIK,
$_SERVER['REMOTE_HOST'] 应该以“google.com”或“yahoo.com”结尾。
但这是最有保障的方法吗?
还有其他出路吗?
AFAIK,
$_SERVER['REMOTE_HOST'] 应该以“google.com”或“yahoo.com”结尾。
但这是最有保障的方法吗?
还有其他出路吗?
您通过用户代理和 IP 地址来识别搜索引擎。更多信息可以在如何识别搜索引擎蜘蛛和网络机器人中找到。这份清单也值得注意。但是,您不应该将用户代理(甚至远程主机)视为必然的。用户代理实际上只不过是另一端告诉你的东西,当然它可以自由地告诉你任何事情。编写代码伪装成 Googlebot 很简单。
在 PHP 中,这意味着查看$_SERVER['HTTP_USER_AGENT']
和$_SERVER['REMOTE_HOST']
。
有很多搜索引擎,但老实说,一般来说,它只是您真正关心的少数几个。谷歌和雅虎一起拥有了几乎所有的市场。但这当然取决于您要实现的目标。
注意:当涉及到内容时,要非常小心地将搜索引擎与普通用户区别对待(如乔尔所说的“邪恶的连字符网站”)。在特别恶劣的情况下,这可能会使您的网站从该搜索引擎中删除。即使这种情况没有发生,您也可能会让一些访问网站的用户望而却步。如果他们随后看到“请注册以查看本文”框,那么,请感谢您的高跳出率。
首先,我希望您不要尝试这样做,以便为搜索引擎机器人提供与您的网站为普通用户提供的不同内容。如果他们发现您这样做,您的网站将从他们的列表中完全删除。只要您了解它的风险,您通常可以找到有关他们将使用什么唯一用户代理的信息:
然而,一些编写(通常行为不佳的)网络爬虫的人会将他们的用户代理字符串设置为与“合法”爬虫(如谷歌)相同。您可以通过查找机器人的 IP 地址/主机名来捕获这些信息,以确保它们实际上来自 Google/Yahoo/etc。有关在主机名查找中查找内容的更多信息(来自本文):
- Google 抓取工具将以 googlebot.com 结尾,例如 crawl-66-249-70-244.googlebot.com。
- 雅虎爬虫将以 crawl.yahoo.net 结尾,就像在 llf520064.crawl.yahoo.net 中一样。
- 实时搜索爬虫将以 search.msn.com 结尾,如 msnbot-65-55-104-161.search.msn.com。
- Ask 爬虫将以 ask.com 结尾,如 crawler4037.ask.com。
您最好使用 $_SERVER['HTTP_USER_AGENT'] 并查找 Googlebot 或 Yahoo! 啜饮。
我不认为爬虫来自 google.com,而且我知道您不想将其他一些人视为来自那里的机器人。所有搜索您的网站的人。
您需要做的是查看不同机器人的 IP。 http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=80553
$_SERVER['HTTP_USER_AGENT']
在此处检查各种用户代理字符串:http ://www.user-agents.org/
Google/Bing/Yahoo Crawlers IP 地址 -
http://myip.ms/info/bots/Google_Bing_Yahoo_Facebook_etc_Bot_IP_Addresses.html
使用众所周知且行为良好的机器人(如您提到的那些机器人)的最佳方法是通过用户代理,您可以在 $_SERVER['HTTP_USER_AGENT'] 上找到它。
我一起破解了一些东西,但是您必须查看 $_SERVER['HTTP_USER_AGENT'] 以查看它们是否来自搜索引擎域。
function is_crawlers() {
$sites = 'Google|Yahoo|msnbot|'; // Add the rest of the search-engines
return (preg_match("/$sites/", $_SERVER['HTTP_USER_AGENT']) > 0) ? true : false;
}