重定向网络爬虫

4
我有一个在线工具,用于跟踪任务及用户完成情况。在该过程中我记录了$_SERVER['HTTP_USER_AGENT']。然而,偶尔会遇到来自各种机器人和网络爬虫的访问。如何温和地将它们重定向到其他地方,以免“伤害它们的感情”?
我想建立一个包含机器人名称的数组,并对每个AGENT信息运行它,如果在数组中找到,则重定向。
有没有更好的方法?

2
如果你这样做,请不要忘记发送 header("Vary: User-Agent"); - mario
给真实用户和网络爬虫提供不同的内容可能会导致大型搜索引擎惩罚您,降低您的网站在其搜索结果中的排名。 - ThiefMaster
哦,我需要检查一下。我不熟悉“Vary”。谢谢。 - santa
@ThiefMaster 你说得对,这就是为什么我正在寻找不会产生反作用的解决方案。 - santa
你也可以使用MySQL创建一个用户代理表,并添加一个名为“crawler”的列,然后对数据库运行查询以检查它是否是机器人,这比在PHP脚本中管理数组要容易得多。 - Vultour
没有这样的解决方案。至少谷歌已知可以从常规用户代理访问IP地址不在常规谷歌网络块之内的站点。因此,您无法确定它是爬虫还是其他用户。 - ThiefMaster
2个回答

6
如果还没有这样做,您可以利用robots.txt文件来摆脱大多数网络爬虫。具体请参见此处。然而,并不是所有网络爬虫都会严格遵守这一规定。对于那些仍在进行爬取的爬虫,您可以使用iptables在Linux上实现IP封禁。以下是示例:
iptables -A INPUT -s IP-ADDRESS -j DROP

我有一个robots.txt文件,主要禁止一些“坏”机器人,并禁止访问某些目录。我能否添加一个页面,使它们无法访问?该页面是动态的,始终以相同的前缀开头:/plan... 比如 /planDWXWS5WsD?谢谢。 - santa
1
“disallow /plan*” 可能适用于 Google,但通配符不受愚蠢的网络爬虫支持。您应该在每个链接后面添加 rel="nofollow" 后缀来结合使用 http://support.google.com/webmasters/bin/answer.py?hl=en&answer=96569 - William Dixon
是的,我有rel="nofollow",但我认为一些用户会转发链接,这就是我得到“不请自来”的访问者的原因。我想现在我会尝试通配符解决方案,并进一步监控是否仍然有机器人。 - santa
元标签<meta name="robots" content="nofollow" />可以在页面中添加。就像我说的,不是所有的网络爬虫都值得信任。如果我是你,我会禁止除了主要的搜索引擎(如Google、Bing等)之外的所有爬虫。 - William Dixon

3

制作一个包含必要爬虫的列表,并使用以下代码进行重定向:

header('HTTP/1.1 301 Moved Permanently');
header('Location: NEED_URL_HERE');

实际上,您可以使用.htaccessrobots.txt(如果爬虫使用它)。

 User-agent: *
 Disallow: /
更新:如果您将此用于搜索引擎优化(cloaking),则可能会受到搜索引擎的惩罚,请小心。

我能否使用以下内容:User-agent: * Disallow: /plan 来保护以/plan开头的页面,例如/planDWXWS5WsD? - santa
1
我是指.htaccess课程。你可以禁止使用以下代码:User-agent: * Disallow: /plan* - Barif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接