Python反爬虫业务安全简介与应对策略
反爬虫风控业务
起源
爬虫在这个大数据时代已经不是什么新鲜事儿了,之前我们说的爬虫可能就是说网页的爬虫,用来建立网页索引,在数据分析和机器学习火热的当下,互联网上面的爬虫那就更加普遍了,这些爬虫日日夜夜的爬取数据,这就导致部分行业成为了爬虫的重灾区:
- 火车飞机票务
- 金融行情数据
- 区块链要闻
- 简历个人信息
- 房屋商品价格
- 门票演唱会
- ...
据统计互联网上绝大多数的流量都是机器的流量,这部分流量有多大呢,占据了互联网的半壁江山:51%。
这些流量中有些是 “失控” 的,是 “野蛮” 的。
蚂蚁吃大象。2019 年的 4 月中旬,进了一个数据矿工的群组,里面近千号人,都在热聊一件事,都在讨论一个开源的项目,这个项目是关于如何绕过 XX 公司的爬虫防护策略的,他们利用这个工具爬取了文书网,之前我对文书的站点不是很了解,后来才知道是一个政府开放的查询个人传票信息的,这个网站在 4 月中旬发布公告停机升级,过了几天发现文书网更换了反爬虫供应商,之前网站被爬的无法对外服务了。
残酷的竞争。互联网广告和游戏这一块是重要的赢利点,前提是你要拥有众多的用户群体,你才能参与进这样的揽金行业。马蜂窝与携程都拥有国内旅游信息业务板块,两者曾经出现了 “携程起诉马蜂窝恶意爬取其游记和旅游评论信息” 这样的微博热文,这样的商业竞争行为在互联网上还有很多,大家都是为了 “争” 业务,“抢” 用户。
恶意报复。携程算是在反爬虫领域做得比较早的一家企业了,发布的关于反爬虫的认知方面的材料也很有深度和见解,携程最早是因为被爬挂了,所以才有对于反爬虫的诉求。
抛开业务价值不说,光就这 51% 的流量,也会给企业带来额外的经济成本。再算上爬虫的安全漏扫、信息价值流失,爬虫在无形之中大量盗用企业的信息资产,却很少引起企业的关注。
反爬虫我们要防御什么
反爬虫业务的三大威胁是刷量、占用资源、信息资产盗取。
刷量在广告、娱乐行业,比较典型按点击点付费的场景,因为是按量进行结算,结算方或者其他第三方可能会利用爬虫去刷量。刷量方法有机器刷量和人工刷量两种,其中机器刷量成本相对更加低廉,被各种中间平台广泛采用。
占用资源。恶意爬虫访问会占用很多服务器资源,有些服务商的站点或者服务并没有储备太多额外的业务并发,恶意爬虫可能就会造成服务商的原服务受影响,导致正常正常用户访问速度变慢访问速度变慢,甚至服务商服务直接崩溃。
信息资产盗取。盗取在新闻、机票素材、直播等行业,存在很多原创有价值的内容,黑产经常会盯上这些内容然后通过爬虫进行倒卖赚中间的差价,严重影响原服务商和创作者的积极性。
反爬虫技术防御视角
很早之前,互联网上并没有反爬虫一说,但是随着爬虫的肆虐,反爬虫的技术早已在悄然发展,举几个常见的反爬虫的手段:
- IP 频率限制
- UA 频率限制
- API 数据加密
- 数据蜜罐
- 前端数据收集
- 账户权限
以上都是我们常见的反爬虫的手段,只是以前这些东西没有被关联上 “反爬虫” 风控业务。
反爬虫安全威胁是从前几年前才进入大家的视线,被认为是继应用层防火墙 WAF 之后的业务层防火墙。国内竞争可能不明显,但是在国外,频频有关于反爬虫业务安全公司被 WAF 厂商收购的消息,其中最大的两家 Distil 和 ShieldSquare 在今年内被收购了,绿盟 WAF 同样也在今年内规划了反爬虫的功能。
反爬虫的挑战在哪里?
传统反爬虫方案也有,但是大厂还在不断改进,规划新版本,大家都没闲着,到底是因为什么?反爬虫业务面临着什么样的挑战?
传统方案难以应对分布式爬虫。当前分布式爬虫应用随着云服务的兴起,也流行了起来,很多开源的爬虫方案都能够很好的支持分布式爬取。这种爬虫拥有大量的 IP、UA、账号、设备等资源,传统方案的灵敏度,数据维度,资源池都受到严重的挑战,没有大数据和机器学习算法的参与,很难从中间寻找到蛛丝马迹。
数据采集难度大。反爬虫业务贯穿整个数据链路,从设备环境、网络传输、应用层协议、业务特性等层面参与检测,传统的反爬虫方案主要集中在资源的一个点上面,而且防御大多与业务结合的太过于紧密,很难实现灵活的策略,最大的问题是前端数据采集聊胜于无,我们知道很大一部分爬虫部署在云端,使用了大量的代理,在没有 GUI 的状态下疯狂的爬取数据,但是我们就是找不到足够的证据,更无从防御。
总结下来:
- 云服务器检测
- 代理检测
- 真人识别
- 协议分析
- 数据频率
- 账号团伙
- 设备团伙
- IP 风险
这些业务诉求都对传统的方案提出了重大的挑战,也是反爬虫风控业务面临的新技术挑战。
反爬虫防御现状
市面上已经有几家不同的反爬虫防御厂商的产品,下面简单介绍下大家的反爬虫思路:
- 利用 IP 和 UA 防护。
这类产品很多云 WAF 厂商都用,优点是开发成本小、策略简单,缺点是数据要更新及时、误封率极高,某些情况下还不如用户自己的账号权限、接口频率来的实在。
- 利用加密 JS 和动态 URL。
这个方案是一个比较新奇的思路,通过动态刷新 JS 来提高破解难度,通过动态 URL 导致爬虫找不到正确的 URL,也就无法访问数据。。该方案可以干掉绝大多数的爬虫,但是却无法很好的保护数据接口,因为需要执行 JS。另外对于搜索引擎的杀伤力巨大,搜索引擎就是一个爬虫,他哪里知道你的动态 URL ?对于模拟器也没有什么防御效果。这个方案一旦被破解了 JS,市面上所有使用了该产品的用户都会被破解。
- 利用机器学习产生统一设备指纹。
这个方案的优势在于从设备角度标识用户,保证同一个设备无论在什么环境下访问网站都可以产生同一个设备指纹,然后通过该设备指纹对接口限制频率,再通过时序检测分析出各个有害的设备进行拦截。这样可以在全网建立一个比较大的设备指纹库,策略简单有效。。方案最大的问题就是方案本身,哪里去找到这样一个设备指纹,目前基本上没法 100% 标识一个设备,另外对于中国网吧这样统一装机的,我怕大家都会懵逼。
- 通过动态 HTML。
通过使用 CSS tricky 和 动态 HTML 的内容导致爬虫无法准确提取到关键数据来进行反爬,即使数据被爬取了,但是爬到了错误的数据,也就没有继续爬取的必要了。本质上是防御爬虫数据使用场景,该方案多见于内容型的业务,比如微信文章,招聘网站的电话号码等。
- 利用数据链路和流量观测进行分析。
对于一个用户的所有访问请求进行时序关联分析,发现恶意有风险的操作行为,配合验证码对用户的访问行为进行图灵测试。该方案对于技术要求难度比较大,但是对抗性比较强、误封率低,缺点是如果出现误封了,那么用户体验性等于 0,配合数据蜜罐的话,该方案能优化不少。比如有风险,返回 10 条数据,没风险返回 100 条等。
本篇主要介绍了下背景和现状,如果觉得我写的不错,就多多鼓励,后续持续连载介绍关于反爬虫技术的各个环节。
在线检测爬虫: 免费在线检测
Python反爬虫业务安全简介与应对策略
在线爬虫检测的原理是什么? 直接下载 html 的话不会加载你的 js, 怎么做到检测的?
帖子标题是“Python反爬虫业务安全简介与应对策略”,这是一个不涉及具体代码实现的问题,主要讨论概念和策略。
简单来说,反爬虫就是为了保护网站的数据和服务器资源,防止被自动化程序(爬虫)过度抓取而采取的技术手段。从业务安全角度看,这不仅是技术对抗,更是为了保护数据资产、维持服务稳定和商业竞争力。
常见的反爬虫策略包括几个层面:
- 基础检测:检查HTTP请求头(如
User-Agent,Referer),用验证码(如CAPTCHA)拦截简单自动化脚本。 - 行为分析:监控访问频率、点击模式、鼠标移动轨迹等,识别出非人类的行为模式。
- 技术对抗:使用JavaScript动态渲染页面(数据由JS加载)、设置数据加密或混淆、对接口参数进行签名验证、采用WebSocket等非传统HTTP通信方式。
- 法律与协议:通过
robots.txt声明爬取规则,利用用户协议进行法律约束。
作为开发者,应对策略也需要多管齐下:
- 遵守规则:首先尊重
robots.txt和网站条款。 - 模拟真人:使用真实的浏览器请求头,管理好Cookies和Session,在请求间添加合理的随机延迟。
- 处理动态内容:对于JS渲染的页面,使用Selenium、Playwright或Pyppeteer等工具来模拟浏览器环境执行JavaScript。
- 破解复杂加密:可能需要逆向分析前端JavaScript代码,理解其加密或签名算法,并在Python中复现。这通常需要一定的JS功底和调试技巧。
- 使用代理IP池:应对基于IP的访问频率限制,分散请求来源。
- 考虑官方API:如果网站提供,这是最合规高效的数据获取方式。
总结:这是一场持续的技术博弈,核心在于模拟人类行为或理解对方逻辑。
通过 js 发送请求来检测的,云端会综合 JS 采集和数据和协议进行分析,这个在线版本的话,如果不加载 js 的话就不能检测了,其他防护版本可以针对你说的这个场景进行检测
通过 LB 层来做处理
跨站 js 谨慎加载,你压根不知道这段 js 对你的用户干了啥。
大部分都是直接爬 html 或者接口吧,怎么会去加载你的 js 呢?爬虫检测要做也更应该是做在服务端吧
一般我的做法是识别出爬虫了, 喂一点假数据 比如机票本来是 1000$ 给他一个 10$ 或者 10000$ 真真假假 干扰他
对啊,正常用户都会去加载 js 然后爬虫就不会,那不就是抓到了
那你这个只用前端网页接入就好了还是后端也要接入呢?
如果只是简单分析看看大概情况,前端分析就可以了,如果想要更加准确和全面的覆盖,我们也支持后端分析,后端分析可以是日志,也可以直接反代接入
就像你去买票要交身份证一样,能拿到的信息是你的身份号,地址,姓名,JS 采集数据同样也是拿到你浏览器和访问网站的情况这些东西,能做什么了
前端接入没用呀,需要后端配合吧?接入前端 SDK 可以知道哪些人是正常访问(加载了 JS),但是怎么知道哪些人不是正常访问(没加载 JS),这个不是应该后端配合才能检测出来的吗?
他说的是安全性问题,随便加载别人的 JS 可能会被跨站攻击
前端接入效果不是很好,是需要配合后端接入,这个站点后续会开放越来越多的接入方式。 这个有个群可以交流 727982278
关于文章中的数据矿工群,给大家分享一下,大家可以来互相交流一下反爬与反爬虫的技巧:119794042


