1

AFAIK,

$_SERVER['REMOTE_HOST'] 应该以“google.com”或“yahoo.com”结尾。

但这是最有保障的方法吗?

还有其他出路吗?

4

8 回答 8

9

您通过用户代理和 IP 地址来识别搜索引擎。更多信息可以在如何识别搜索引擎蜘蛛和网络机器人中找到。这份清单也值得注意。但是,您不应该将用户代理(甚至远程主机)视为必然的。用户代理实际上只不过是另一端告诉你的东西,当然它可以自由地告诉你任何事情。编写代码伪装成 Googlebot 很简单。

在 PHP 中,这意味着查看$_SERVER['HTTP_USER_AGENT']$_SERVER['REMOTE_HOST']

有很多搜索引擎,但老实说,一般来说,它只是您真正关心的少数几个。谷歌和雅虎一起拥有了几乎所有的市场。但这当然取决于您要实现的目标。

注意:当涉及到内容时,要非常小心地将搜索引擎与普通用户区别对待(如乔尔所说的“邪恶的连字符网站”)。在特别恶劣的情况下,这可能会使您的网站从该搜索引擎中删除。即使这种情况没有发生,您也可能会让一些访问网站的用户望而却步。如果他们随后看到“请注册以查看本文”框,那么,请感谢您的高跳出率。

于 2009-05-27T14:48:44.517 回答
8

首先,我希望您不要尝试这样做,以便为搜索引擎机器人提供与您的网站为普通用户提供的不同内容。如果他们发现您这样做,您的网站将从他们的列表中完全删除。只要您了解它的风险,您通常可以找到有关他们将使用什么唯一用户代理的信息:

  • 验证 Googlebot(如果您想确定,请使用用户代理、反向 DNS)
  • 雅虎的用户代理将包含“Slurp”

然而,一些编写(通常行为不佳的)网络爬虫的人会将他们的用户代理字符串设置为与“合法”爬虫(如谷歌)相同。您可以通过查找机器人的 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。
于 2009-05-27T14:55:36.220 回答
5

您最好使用 $_SERVER['HTTP_USER_AGENT'] 并​​查找 Googlebot 或 Yahoo! 啜饮。

于 2009-05-27T14:49:23.893 回答
2

我不认为爬虫来自 google.com,而且我知道您不想将其他一些人视为来自那里的机器人。所有搜索您的网站的人。

您需要做的是查看不同机器人的 IP。 http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=80553

于 2009-05-27T14:53:06.803 回答
1
$_SERVER['HTTP_USER_AGENT']

在此处检查各种用户代理字符串:http ://www.user-agents.org/

于 2009-05-27T14:59:41.843 回答
1

Google/Bing/Yahoo Crawlers IP 地址 -

http://myip.ms/info/bots/Google_Bing_Yahoo_Facebook_etc_Bot_IP_Addresses.html

于 2014-07-26T14:49:30.273 回答
0

使用众所周知且行为良好的机器人(如您提到的那些机器人)的最佳方法是通过用户代理,您可以在 $_SERVER['HTTP_USER_AGENT'] 上找到它。

于 2009-05-27T14:51:34.543 回答
-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;  

   }
于 2009-05-27T14:57:25.140 回答