【发布时间】:2010-09-05 22:40:06
【问题描述】:
我很确定很多人都想到了这一点,但由于某种原因,我无法使用 Google 和 StackOverflow 搜索找到它。
我想创建一个不可见的链接(被 robots.txt 列入黑名单)到 CGI 或 PHP 页面,该页面将“诱捕”恶意机器人和蜘蛛。到目前为止,我已经尝试过:
-
正文中的空链接:
<a href='/trap'><!-- nothing --></a>这在大多数情况下都很好用,但有两个小问题:
问题:链接是文档正文的一部分。尽管它几乎无法用鼠标点击,但一些访问者在使用 Tab 和 Enter 键盘导航网站时仍然不经意地点击了它。此外,如果他们将页面复制粘贴到文字处理器或电子邮件软件中,例如,陷阱链接会被复制,有时甚至可以点击(某些软件不喜欢空的
<a>标签并将 href 复制为标签的内容)。 -
体内不可见的方块:
<div style="display:none"><a href='/trap'><!-- nothing --></a></div>这解决了键盘导航的问题,至少在我测试的浏览器中是这样。该链接实际上无法从页面的正常显示中访问,但对于大多数具有当前智能水平的蜘蛛机器人仍然完全可见。
问题:链接仍然是 DOM 的一部分。如果用户复制粘贴页面的内容,它会重新出现。
-
评论区内部:
<!-- <a href='/trap'>trap</a> -->这有效地从页面的 DOM 中删除了链接。好吧,从技术上讲,注释仍然是 DOM 的一部分,但它达到了合规用户代理不会生成 A 元素的预期效果,因此它不是实际的链接。
问题: 现在大多数蜘蛛机器人都足够聪明,可以解析 (X)HTML 并忽略 cmets。我个人见过使用 Internet Explorer COM/ActiveX 对象解析 (X)HTML 并通过 XPath 或 Javascript 提取所有链接的机器人。这些类型的机器人不会被诱骗跟随陷阱超链接。
我一直在使用方法 #3,直到昨晚,当我被一群机器人袭击时,这些机器人似乎对它们遵循的链接非常有选择性。现在我回到方法#2,但我仍在寻找更有效的方法。
我错过了任何建议或其他不同的解决方案?
【问题讨论】:
标签: html hyperlink web-crawler