有哪些选项可以检测不想被检测到的网络爬虫?
(我知道列出检测技术可以让智能隐形爬虫程序员制作出更好的蜘蛛,但我认为无论如何我们都无法阻止智能隐形爬虫,只能阻止那些犯错误的爬虫。)
我不是在谈论像 googlebot 和 Yahoo! 这样的爬虫。啜饮。我认为一个机器人很好,如果它:
- 在用户代理字符串中将自己标识为机器人
- 读取 robots.txt(并服从它)
我说的是糟糕的爬虫,隐藏在普通用户代理后面,使用我的带宽,从不给我任何回报。
有一些活板门可以构建更新列表(感谢 Chris,gs):
- 添加仅在 robots.txt 中列出(标记为不允许)的目录,
- 添加隐形链接(可能标记为 rel="nofollow"?),
- 样式=“显示:无;” 在链接或父容器上
- 放置在具有更高 z-index 的另一个元素下方
- 检测谁不了解 CapiTaLiSaTioN,
- 检测谁试图发布回复但始终未能通过验证码。
- 检测对仅 POST 资源的 GET 请求
- 检测请求之间的间隔
- 检测请求页面的顺序
- 检测谁(一致地)通过 http 请求 https 资源
- 检测谁不请求图像文件(这与已知图像浏览器的用户代理列表相结合,效果非常好)
“好”和“坏”机器人都会触发一些陷阱。您可以将它们与白名单结合起来:
- 它触发了一个陷阱
- 它要求
robots.txt
? - 它不会触发另一个陷阱,因为它服从了
robots.txt
另一件重要的事情是:
请考虑使用屏幕阅读器的盲人:给人们一种联系您的方式,或解决(非图像)验证码以继续浏览。
有什么方法可以自动检测试图将自己伪装成普通人类访问者的网络爬虫。
更新
问题不是:我如何捕获每个爬虫。问题是:如何最大限度地提高检测到爬虫的机会。
有些蜘蛛真的很厉害,实际上可以解析和理解 html、xhtml、css javascript、VB 脚本等......
我没有幻想:我无法击败它们。
但是,您会惊讶于某些爬虫是多么愚蠢。愚蠢的最好例子(在我看来)是:在请求它们之前将所有 URL 转换为小写。
然后有一大堆爬虫“不够好”,无法避开各种活板门。