返回介绍

15.2 爬虫与反爬虫

发布于 2024-10-11 22:28:33 字数 3114 浏览 0 评论 0 收藏 0

15.2.1 爬虫

Distil Networks 对 2017 年网络数千个域名及上千亿次的访问进行分析,发布了《2018 Bad Bot Report》。报告指出,2017 年间,42.2%的互联网流量来自于“机器人”(Bots),而非真实用户。

事实上,“机器人”指的是互联网上的爬虫、自动机或者模拟器。部分“机器人”流量来自于搜索引擎爬虫、自动更新的 RSS 订阅服务器等,它们是良性的,属于正常机器流量(Good Bots)。另外一部分由恶意爬虫、自动机、模拟器等产生,伪造真实用户发起的请求,属于恶意机器流量(Bad Bots)。这些流量在应用层攻击网站、APP 或是 API,以达到获利的目的,同时也会对企业造成经济上的巨大损失。

网上有大量关于如何编写爬虫的文章,从基础的 GET 请求、POST 请求到使用 Cookie、使用代理、设置 Sleep、设置 UA 伪装成浏览器、设置 Referer 防来源检查,再到断线重连、多进程、以及处理 Ajax 请求等,更高级的是使用 Selenium+PhantomJS 类的技术直接操作浏览器,执行 js 代码、识别或绕过验证码等。

V2EX 上有位网友分享了一个真实案例,他在每个不同的网站使用不同的邮箱名,这样收到垃圾邮件时就知道是谁家服务泄露了自己的信息,结果在“随手机”上注册的邮箱收到了某银行的广告营销邮件。恰逢《网络安全法》2017 年 6 月 1 日开始实施,所以这个事件当时炒得非常热,最后牵出了一个名为八爪鱼的采集器。八爪鱼是一个商业的采集器,其内置浏览器几乎可以模拟用户的所有行为,包括移动鼠标、点击鼠标、翻页、点击链接、滚动鼠标滚轮、切换下拉菜单、输入文字,自动识别验证码(人工打码+机器识别),甚至看到不同的页面还能采取不同的处理流程,云采集还有成千上万的 IP 实时切换,其官网介绍如图 15-9 所示。

图 15-9 八爪鱼采集器介绍

15.2.2 反爬虫

再看看我们主流的反爬虫技术,一般分为后台限制及前端变化两种。

1.后台限制

后台限制一般包括:设置 robots.txt 文件,针对单个 IP 访问超过阈值后封锁 IP,针对单个 Session 访问超过阈值后封锁 Session,针对单个 User-Agent 访问超过阈值进行封锁,组合前几个值进行访问统计超阈值进行阻断或者发验证码要求验证。这些和前面防撞库中的内容有些相似性,不再赘述。比较暴力一点的是直接阻断一些类似 PycURL、libwww-perl 等 User-Agent 的访问,某些国产 WAF 中关于爬虫防护的内容中就列举了常见的爬虫 UA 以供用户选择。

当然这些都容易绕过,不遵守 robots 协议、换 IP、换 Session、换 UA 都相对简单,但我们也可以利用它来做一些事情,比如我们在 13.7 节中讲到的蜜罐技术,设置假的 robots,放置一些 hidden 的表单项,或者一些注释掉的页面链接等,不会影响用户体验,但爬虫一旦访问即说明有问题,可以进一步干预,比如阻断。

2.前端变化

后端限制效果可以马上呈现,但随着爬虫技术的不断提升,在后端能做的工作越来越有限,而且还会存在误伤的问题,所以更多企业把精力放在前端上,对重要的页面内容进行保护,防止被批量爬取。前端技术多种多样,我们简单看几个实际案例来体会一下。第一个案例是某代理 IP 网站页面,为了保护上面公布的 IP 地址不被人爬取,对 IP 地址数字和字符做了拼凑处理,如图 15-10 所示。

图 15-10 某 IP 代理防爬虫例子

聪明的爬虫如果拼接上面的 div 和 span 标签,也能获取到正确的 IP 地址。接下来我们再看看下面这个案例,如图 15-11 所示。

图 15-11 某网站价格保护

三位数的价格就会生成 3 个 b 标签,其中第一个 b 标签里包含 3 个 i 标签,利用元素定位覆盖错误的 i 标签,从而最终给用户显示正确的价格,但爬虫就难搞了,拼凑不行还得要解析 CSS 并进行计算偏移覆盖情况。下面的案例就更另类了,打开某电影网站,随便找个电影查看其累计票房数据,如图 15-12 所示。

票房数里展示的根本不是数字,而是使用了 font-face 定义了字符集,并且每次刷新,字符集的 URL 还是动态变化的,如图 15-13 所示。

如果要爬这个数字,可能还不如 OCR 识别来的更好一些。从上面这三个案例中,可以看到前端的确可以做很多事情。除了上面这些前端技巧外,还有以下经验值得参考:

1)关键数据可以考虑文本转成图片,甚至添加水印。

2)网站请求的 URL 复杂化,尽量不暴露数据的唯一键(如 ID 等),避免爬虫通过修改 ID 即可轻松爬取其他信息。

3)前端 HTML 页面根据用户点击情况动态加载,即查询页面源码时,只能看到列表的第一条数据。

4)结合账号登录情况,对页面进行保护,比如 Token 等。

图 15-12 某电影网站票房统计数据保护

图 15-13 某电影网站票房统计数据对应的字体元素

5)结合蜜罐思路,确认异常时可以返回虚假数据。

反爬虫的本质是找到真正人类用户和爬虫程序的区别,限制爬虫程序的访问,理论上只要爬虫程序可以模拟任何人类上网的行为,就可以完美击败反爬虫机制,所以反爬虫最终注定是要失败的,于是这种对抗就演变为不断地升级变化,提升对抗成本和难度。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文