有哪些选项可以检测不想被检测的网络爬虫?
(我知道列表检测技术将使聪明的隐身爬虫程序员能够制造出更好的蜘蛛,但是我认为我们无论如何都不会阻止聪明的隐身爬虫,只有那些会犯错误的人才可以。)
我不是在谈论诸如Googlebot和Yahoo!这样的爬虫。lur 如果它适合我,我认为它很不错:
- 在用户代理字符串中将自己标识为漫游器
- 读取robots.txt(并遵守它)
我说的是糟糕的抓取工具,它们隐藏在常见的用户代理后面,使用我的带宽,从不给我任何回报。
有一些陷阱门可以构造更新列表(感谢Chris,gs):
- 添加仅在robots.txt中列出(标记为不允许)的目录,
- 添加不可见的链接(可能标记为rel =“ nofollow”?),
- style =“ display:none;” 在链接或父容器上
- 放在另一个Z-index较高的元素下
- 检测谁不了解CaPiTaLiSaTioN,
- 检测谁尝试发布回复,但总是使验证码失败。
- 检测对仅POST资源的GET请求
- 检测请求之间的间隔
- 检测所请求页面的顺序
- 检测谁(一致地)通过http请求https资源
- 检测谁不请求图像文件(与已知的具有图像功能的浏览器的用户代理列表结合使用,效果非常好)
一些陷阱将由“好”和“坏”的僵尸程序触发。您可以将其与白名单合并:
- 触发陷阱
- 它要求
robots.txt
吗? - 它不会触发另一个陷阱,因为它遵循了
robots.txt
这里还有一个重要的事情是:
请考虑使用屏幕阅读器的盲人:给人们一种与您联系的方法,或者解决(非图像)验证码以继续浏览的问题。
有哪些方法可以自动检测试图将自己掩盖为正常访客的网络爬虫。
更新
问题不在于:如何捕获每个爬虫。问题是:如何最大程度地检测爬虫。
有些蜘蛛非常好,实际上可以解析和理解html,xhtml,css javascript,VB脚本等...
我没有幻想:我无法击败他们。
但是,您会惊讶于某些爬虫多么愚蠢。在我看来,愚蠢的最好例子是:在请求所有URL之前,将所有URL转换为小写。
然后还有一大堆“不够好”的履带板无法避开各种活板门。