AFAIK,
$ _ SERVER ['REMOTE_HOST']应以“google.com”或“yahoo.com”结尾。
但它是最有保障的方法吗?
还有其他出路吗?
答案 0 :(得分:9)
您可以通过user agent and IP address识别搜索引擎。更多信息可以在How to identify search engine spiders and webbots中找到。值得注意的是this list。但是,您不应将用户代理(甚至远程主机)视为必然的确定性。用户代理实际上只不过是另一端告诉你的东西,它当然可以自由地告诉你任何事情。编写代码假装是Googlebot是微不足道的。
在PHP中,这意味着要查看$_SERVER['HTTP_USER_AGENT']
和$_SERVER['REMOTE_HOST']
。
有很多搜索引擎但老实说,这只是你真正关心的大多数搜索引擎。谷歌和雅虎几乎拥有全部市场。但当然这取决于你想要达到的目标。
注意:要非常小心地将搜索引擎与普通用户区别对待(如Joel所说的“邪恶的连字符网站”)当涉及到内容时。在特别令人震惊的情况下,这可能会使您的网站从该搜索引擎中删除。即使这种情况没有发生,你也可能会让一些用户离开去网站期待某些东西。如果他们出现了“请注册以查看此文章”框,那么请抓住您的高跳出率。
答案 1 :(得分:8)
首先,我希望您不要尝试这样做,以便为搜索引擎机器人提供与您的网站包含的普通用户不同的内容。如果他们发现您这样做,您的网站将完全从其列表中删除。只要您了解它的风险,您通常可以找到有关他们将使用的唯一用户代理的信息:
但是,有些人(通常是表现不佳的)网络抓取工具会将其用户代理字符串设置为与Google等“合法”抓取工具相同。您可以通过查找机器人的IP地址/主机名来捕获这些内容,以确保它们实际上来自Google / Yahoo / etc。有关在主机名查找中查找内容的更多信息(from this article):
- Google抓取工具将以googlebot.com结尾,例如crawl-66-249-70-244.googlebot.com。
- Yahoo抓取工具将以llf520064.crawl.yahoo.net中的crawl.yahoo.net结尾。
- Live Search抓取工具将以msnbot-65-55-104-161.search.msn.com中的search.msn.com结尾。
- 询问抓取工具将以crawler4037.ask.com中的ask.com结尾。
答案 2 :(得分:5)
你可能最好使用$ _SERVER ['HTTP_USER_AGENT']并寻找Googlebot或Yahoo!思乐普
答案 3 :(得分:2)
我不认为抓取工具来自google.com,我知道其他一些你不想把它当作来自那里的机器人。所有搜索您网站的人。
您需要做的是查看不同机器人的IP。 http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=80553
答案 4 :(得分:1)
$_SERVER['HTTP_USER_AGENT']
在此处检查各种用户代理字符串:http://www.user-agents.org/
答案 5 :(得分:1)
Google / Bing / Yahoo Crawlers IP地址 -
http://myip.ms/info/bots/Google_Bing_Yahoo_Facebook_etc_Bot_IP_Addresses.html
答案 6 :(得分:0)
与您提到的知名和行为机器人一样,最好的方法是使用user agent,{$ 3}}可以在$ _SERVER ['HTTP_USER_AGENT']找到。
答案 7 :(得分:-1)
我一起攻击了一些内容,但你必须查看$ _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;
}