如何通过PHP识别google / yahoo / msn的网页抓取工具?

时间:2009-05-27 14:46:27

标签: php web-crawler

AFAIK,

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

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

还有其他出路吗?

8 个答案:

答案 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)

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

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

但是,有些人(通常是表现不佳的)网络抓取工具会将其用户代理字符串设置为与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)

答案 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;  

   }