有哪些选项可以检测不希望被检测到的网页抓取工具?
(我知道列表检测技术将允许智能隐形爬虫程序员制作更好的蜘蛛,但我认为我们无论如何都无法阻止智能隐形爬行器,只会出现错误 . )
我不是在谈论像googlebot和Yahoo!这样漂亮的抓取工具 . 啜食 . 我认为机器人很好,如果它:
-
将自己标识为用户代理字符串中的机器人
-
读取robots.txt(并遵守它)
我在谈论坏的爬虫,躲在普通用户代理后面,使用我的带宽,从不给我任何回报 .
有一些陷阱可以构建更新列表(感谢Chris,gs):
-
在robots.txt中添加仅列出(标记为禁止)的目录,
-
添加不可见的链接(可能标记为rel = "nofollow"?),
链接或父容器上的 -
style = "display: none;"
-
放置在具有更高z-index的另一个元素下面
-
检测谁不懂大写,
-
检测谁试图发布回复但总是失败了验证码 .
-
检测对仅POST资源的GET请求
-
检测请求之间的间隔
-
检测所请求页面的顺序
-
检测谁(一致地)通过http请求https资源
-
检测谁没有请求图像文件(这与已知图像功能的浏览器的用户代理列表组合工作非常好)
一些陷阱将由“好”和“坏”机器人触发 . 你可以把它们与白名单结合起来:
-
它触发一个陷阱
-
请求
robots.txt
? -
它不会触发另一个陷阱因为它服从了
robots.txt
另一个重要的事情是:
请考虑盲人使用屏幕阅读器:给人们一种联系方式,或解决(非图像)Captcha继续浏览 .
What methods are there to automatically detect the web crawlers trying to mask themselves as normal human visitors.
更新
问题不是:我如何捕获每个爬虫 . 问题是:如何最大限度地发现爬虫的机会 .
有些蜘蛛真的很好,实际上解析和理解html,xhtml,css javascript,VB脚本等...
我没有幻想:我无法击败他们 .
然而,你会惊讶于一些爬虫是多么愚蠢 . 愚蠢的最好例子(在我看来)是:在请求之前将所有URL强制转换为小写 .
然后有一大堆爬虫只是“不够好”,以避免各种陷阱 .
10 回答
您也可以查看推荐 . 没有推荐会引起机器人的怀疑 . 错误的推荐意味着它肯定不是浏览器 .
我不会这样做的 . 你可以最终被谷歌黑名单SEO黑名单:)
请参阅Project Honeypot - 他们正在大规模设置机器人陷阱(并且DNSRBL及其IP) .
使用棘手的URL和HTML:
在HTML中,您可以使用大量的注释,CDATA元素,实体等技巧:
我听说过一种简单的机器人检测方法是隐藏输入技术 . 如果您正在尝试保护表单,请在表单中输入一个看起来完全合法的ID . 然后在外部文件中使用css来隐藏它 . 或者,如果你真的是偏执狂,设置类似jquery的东西来隐藏页面加载时的输入框 . 如果你做得对,我想机器人很难弄明白 . 你知道那些机器人在那里有自然填充页面上的所有东西,特别是如果你给你的隐藏输入id为id =“fname”等 .
我目前在一家扫描网站的公司工作,以便对它们进行分类 . 我们还检查网站是否存在恶意软件 .
根据我的经验,我们的网络爬虫(当然使用IE或Firefox UA并且不遵守robots.txt . Duh . )的头号拦截器是故意托管恶意软件的网站 . 这是一个痛苦,因为该网站然后回退到一个人必须手动加载网站,分类并检查它是否恶意软件 .
我只是说,by blocking web crawlers you're putting yourself in some bad company.
当然,如果他们非常粗鲁并且吸收了大量的带宽,那么这是一个不同的故事,因为那时你有充分的理由 .
人们不断寻找广泛的抓取工具,而不是专门针对您网站的抓取工具 .
我编写了隐形爬虫,如果它们是单独构建的,那么任何数量的蜜 jar 或隐藏链接都不会产生任何影响 - 检测专用爬虫的唯一真正方法是检查连接模式 .
最好的系统使用AI(例如Linkedin)使用AI来解决这个问题 .
最简单的解决方案是编写日志解析器,分析IP连接并简单地将这些IP列入黑名单或提供验证码,至少是临时的 .
例如
如果每2秒钟看到IP X连接到
foo.com/cars/*.html
而不是任何其他页面 - 它很可能是机器人或饥饿的超级用户 .或者,存在各种javascript挑战作为保护(例如Cloudflare的反僵尸系统),但这些挑战很容易可以解决的问题是,您可以编写一些自定义内容,这可能足以阻止爬行程序的操作 .
但是你必须提出一个问题,你是否愿意为假阳性的合法用户,并为他们带来不便,以防止机器人流量 . 保护公共数据是一个不可能的悖论 .
实际上跟上好的用户代理字符串并不容易 . 浏览器版本来去匆匆 . 通过不同的行为对用户代理字符串进行统计可以揭示有趣的事物 .
我不知道这可以自动化多远,但至少它是一个与众不同的东西 .
一个简单的解决方案是创建一个链接并使其不可见
当然,您应该期望一些查看源代码的人会关注该链接,以了解它所处的位置 . 但是你可以为这些用户提供验证码......
当然,有效的抓取工具也会遵循链接 . 但是你不应该实现rel = nofollow,而是寻找有效爬虫的标志 . (像用户代理)
您没有列出的一件事,通常用于检测错误的爬虫 .
命中速度,良好的网络爬虫将打破他们的命中,所以他们不会泛滥请求的网站 . 坏人会做三件事之一:
一个接一个地点击顺序链接
在一些并行序列中命中顺序链接(一次2个或更多) .
以固定间隔点击顺序链接
此外,一些离线浏览程序会淹没多个页面,我不知道你想要使用什么样的阈值,开始按IP地址阻止 .
此方法还将捕获镜像程序,如fmirror或wget .
如果机器人随机化时间间隔,您可以检查是否以顺序或深度优先的方式遍历链接,或者您可以查看机器人是否正在遍历大量文本(如在要阅读的单词中)太短的时间 . 有些网站也会限制每小时的请求数量 .
实际上,我在某个地方听到了一个想法,我不记得在哪里,如果一个用户获得太多的数据,就千字节而言,他们可以被提供一个验证码,要求他们证明他们不是机器人 . 我从来没有见过这个实现过 .
隐藏链接的更新
就隐藏链接而言,你可以将一个div放在另一个下面,用CSS(将它放在绘图顺序中)并可能设置z顺序 . 机器人不能忽略它,不解析你的所有JavaScript,看它是否是一个菜单 . 在某种程度上,如果没有机器人解析所有的javascript,也不能忽略隐形DIV元素内的链接 .
将这个想法完成后,可能会显示隐藏元素的未经调用的javascript可能会欺骗javascript解析机器人的子集 . 而且,实施起来并不是很多 .
未经测试,但这里有一个很好的用户代理列表,你可以用它来制作正则表达式 . 可以帮到你的大部分路程:
取自:http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
前段时间,我与一家小型托管公司合作,帮助他们实施解决方案 . 我开发的系统检查了Web服务器日志,查看来自任何给定IP地址的过多活动,并发布防火墙规则以阻止违规者 . 它包括基于http://www.iplists.com/的IP地址/范围白名单,然后根据需要通过检查声明的用户代理字符串自动更新,如果客户端声称是合法的蜘蛛但不在白名单上,则执行DNS /反向DNS查找以验证源IP地址是否与声明的机器人所有者相对应 . 作为故障保护,这些操作通过电子邮件报告给管理员,以及在评估错误的情况下将地址黑/白名单链接 .
我在6个月左右的时间里没有和那个客户谈过,但是,最后我听说,系统表现非常有效 .
侧点:如果您正在考虑基于命中率限制执行类似的检测系统,请务必使用至少一分钟(最好至少五分钟)的总计 . 我看到很多人都在谈论这些类型的方案,他们希望阻止任何人在一秒钟内达到5-10次点击率,这可能会在图像繁重的页面上产生误报(除非图像从计数中排除)并且会产生错误当像我这样的人找到一个他想要阅读的有趣网站的时候,所以他打开了标签中的所有链接,以便在他阅读第一个时在后台加载 .