反爬建议

首先存在大量爬虫的现状

真实世界的爬虫比例

大家应该听过一句话吧,大概意思是说,整个互联网上大概有 50%以上的流量其实是爬虫。

举个例子,某公司,某个页面的接口,每分钟访问量是 1.2 万左右。这里面有多少是正常用户呢?

50%?60%?还是?

正确答案是:500 以下。

也就是说,一个单独的页面,12000 的访问量里,有 500 是正常用户,其余是爬虫。

举例:

举个例子,这个世界存在 3 家公司,售卖相同的电商产品。三家公司的名字分别是 A,B,C。

这个时候,客户去 A 公司查询了下某商品的价格,看了下发现价格不好。于是他不打算买了。他对整个行业的订单贡献为 0。

然而 A 公司的后台会检测到,我们有个客户流失了,原因是他来查询了一个商品,这个商品我们的价格不好。没关系,去爬爬别人试试。

于是他分别爬取了 B 公司和 C 公司。

B 公司的后台检测到有人来查询价格,但是呢,最终没有下单。他会认为,嗯,我们流失了一个客户。怎么办呢?

可以爬爬看,别人什么价格。于是他爬取了 A 和 C。

C 公司的后台检测到有人来查询价格……

过了一段时间,三家公司的服务器分别报警,访问量过高

反爬的意义

1.降低服务器压力--因为有各种情况的爬虫存在

1.1因为存在十分低级的应届毕业生,需要数据,所以会有很多低级爬虫

1.2十分低级的创业小公司,想做大数据可是手头没有数据,于是会有爬虫

1.3不小心写错了没人去停止的失控小爬虫

携程上的点评有的时候可能高达60%的访问量是爬虫。我们已经选择直接封锁了,它们依然孜孜不倦地爬取。

1.4成型的商业对手

1.5抽风的搜索引擎

大家不要以为搜索引擎都是好人,他们也有抽风的时候,而且一抽风就会导致服务器性能下降,请求量跟网络攻击没什么区别。

2.保证数据安全性

2.1携程酒店价格,机票价格等

2.2淘宝京东价格--比价网

2.3领英数据

2.4法院判决书--抄底接盘破产

2.5历年高考各院校分数线(智能推荐)

常见反爬的思路和手段还有各自的优缺点(举例)

爬虫判定和处理:

1.基于用户行为

1.1 .1固定的IP或者账号访问频率

超过正常阈值(一般阈值会设置为一分钟不超过多少次)会弹出验证码,或者对ip进行短时间封禁,长时间封禁和永久封禁,但是这种歌方式会有几率误伤用户,所以在验证码方式上是一个比较常见的处理方式,这样爬虫也会相应的降低访问频率而达到对服务器压力的减轻

优点:有效降低服务器压力,增加爬虫调取验证码破解的成本(打码平台和付费代理IP)

缺点:无法保证数据不被爬取(爬虫增加成本后),并且验证码如果过于频繁弹出影响用户体验

使用推荐:可以使用,成本较低,较有效的降低服务器压力(链家安居客等网站和APP在使用这种方式)

1.1.2访问总数和时段

当用户每天进行访问的次数超过一般认定为正常人(一天24小时,并且总数超过自定义的阈值,可以被判定为疑似爬虫)

一般这样的会对ip或者对应账号进行处理

优点:基本封禁掉的都是实的锤爬虫程序,降低服务器压力

缺点:爬虫作出模拟正常用户动作后就无效了(比如设置时段访问,设置随机时间,模拟正常用户)

1.1.3 只下载网页,没有后续的js、CSS请求 ,大量重复简单的网站浏览行为 (绝大多数情况,只有机器人才会做深翻页

这样的行为本身就说明了不正常,基本不会是正常用户,对这样的ip、账号、设备号可以直接封掉

优点:基本封禁掉的都是实的锤爬虫程序,降低服务器压力

缺点:爬虫作出模拟正常用户动作后就无效了(比如使用自动化工具设置上下滑动停留时间,点击等,模拟正常用户)

使用推荐:不推荐,因为需要增加用户行为监控分析,性价比较低

1.1.4通过一些陷阱来发现爬虫,例如一些通过CSS对用户影藏的链接,只有爬虫才会访问

使用推荐:不推荐,因为只对于通用爬虫有效,对于我们app来说专门的爬虫很难掉入陷阱

2.基于用户特征

2.1.1通过请求头识别

headers,是否携带UA,referer(没有这部分信息的就是爬虫无疑了,很多图片网站的防盗链就是检测referer是否为本站点)

cookie(有些app或者网站的信息需要登陆后才能拿到,因为cookie会过期,所以不携带的会被识别为爬虫)

优点:非常有效的进行爬虫识别,不会误伤用户

缺点:爬虫如果使用了随机的UA选择维护大量账号的cookie池,携带了必要的referer后就会伪装过去

使用推荐:可以使用,成本较低,但是对伪装后的爬虫效果不强

反爬的方式

1.加密参数

很多APP和网站都会使用这种方式,比如抖音美拍等会在视频真实地址中进行加密,最右皮皮搞笑会对所有内容的刷新检测一个sign值,这种方法都是会使用JS对参数进行加密解密处理,返回出来的有价值的数据地址不会让你直接请求到,所以对大量爬虫是一个非常有效的反爬方式(举例,网站中美拍的video参数如何生成的真实地址,百度翻译的sign)

例子一:美拍视频video参数的JS加密

抓包发现的接口,返回的数据里面并没有真实的视频地址

找到JS也需要从这六千多行的代码中找出你需要的部分,然而读别人的代码是痛苦且耗时的,尤其是对于并不精通前端JS的爬虫工程师而言

例子二:百度翻译sign的JS加密

此处的sign如果不能破解就无法获取翻译功能

优点:能阻断大量的爬虫,破解难度较大(需要花费爬虫大量时间去读你的加密代码)

缺点:无法完全阻止所有爬虫

第一种破解方式就是进行JS逆向破解,只要有耐心和一定的JS水平,就能解开加密方式。

第二种是使用自动化工具(mitmdump+APPNUM或者按键精灵)监控接口,也能拿到数据

使用推荐:推荐使用,需要定期或不定期更换加密方式,因为看别人代码总比自己写要难(中国法院判决书网站就是这种做法,定期更新加密方式,很有效)

2.css混淆

2.1 FONT-FACE拼凑式

例子:猫眼电影

猫眼电影里,对于票房数据,展示的并不是纯粹的数字。

页面使用了font-face定义了字符集,并通过unicode去映射展示。也就是说,除去图像识别,必须同时爬取字符集,才能识别出数字。

通过检查元素这个6267数值根本就没有写在span标签中,并且,每次刷新页面,字符集的url都是有变化的,无疑更大难度地增加了爬取成本。

2.2 BACKGROUND拼凑式

与font的策略类似,美团里用到的是background拼凑。数字其实是图片,根据不同的background偏移,显示出不同的字符,也就是平时我们说的雪碧切法

并且不同页面,图片的字符排序也是有区别的。不过理论上只需生成0-9与小数点,获取到它的字符图片就能自己根据偏移量进行映射对应的数值,如下图:

2.3 伪元素隐藏式  例子:汽车之家

汽车之家里,把关键的厂商信息,做到了伪元素的content里。

这也是一种思路:爬取网页,必须得解析css,需要拿到伪元素的content,这就提升了爬虫的难度。

2.4 元素定位覆盖式 去哪儿网

对于一个4位数字的机票价格,先用四个i标签渲染,再用两个b标签去绝对定位偏移量,覆盖故意展示错误的i标签,最后在视觉上形成正确的价格…

这样其实如果不注意,多半就是拿到来错误数据(数据分析中错误数据比没有数据更可怕)

2.5 字符集替换式 去哪儿网APP

移动版的去哪儿网直接把字符集替换来,所以必须根据它最新的字符集去映射你在页面中所见到的数据

html里明明写的3211,视觉上展示的却是1233。原来他们重新定义了字符集,3与1的顺序刚好调换得来的结果

使用推荐:不推荐,不适合我们的产品(我们页面中没有敏感的关键数据,比如酒店机票价格等)

3.脏数据(蜜罐)

这种反爬方式在淘宝和京东中有使用,因为本人没有大规模抓取过他们的敏感数据,所以这种方式也是听业内面对过这种情况的大佬所提过,具体的思路是在判定你是爬虫后不对你进行封禁或者别的处理(此时爬虫也拿到了数据),只是在判定为爬虫后给你返回假的数据(也就是脏数据,错误的价格错误的数量等)

这种方式强就强在你根本不知道他们是如何把你识别判定为爬虫的,因为数据量巨大也不可能人工去识别(那样就本末倒置了)从而让你根本不敢去使用这些数据,心里完全没底。

使用推荐:不推荐,因为我们公司展现的数据为新闻或者视频,无法有效利用这种手段

我们公司产品的爬虫方式(哪几种方式获得新闻数据)

1.通过root后等手机修改自己的上网状态(使用4g)成功抓包后找到接口

图示1为访问接口代码部分(只携带了一个必须的请求头参数)

图示2为返回的数据

格式化数据后:

其中可以看出来dataId就是关键参数,这时我们通过微信分享文章的功能,直接就能获得一篇新闻的url:https://h5.makezixun.com/news/article/0/CF816CCF816C6DE2B36060B1D0A5320A2548005B644CF6?from=app

此时替换掉中间的CF816****F6为之前的dataId就可以访问到这篇新闻了,我们的新闻也就这样会被爬到

2 e都市门户

通过观察我们的网站中所有数据直接通过访问首页就写在了response里面(新闻详情页)

并且新闻详情页里面的新闻数据也是这样直接写在了返回的html页面中(也就是说新闻数据是没有任何保护的)

推荐我们APP的反爬具体措施

1.从前端

使用业内比较常见的id加密,通过js返回真实地址(需要反编译??)

2.从后端

通过异常行为进行判断,然后进行固定时限封禁ip或者账号设备号(有余力可以这样操作)

结语:因为所见即所得,为了真实用户,所以爬虫是不能完全禁止的,只有增加抓取成本,让他们在成本考虑下失去对你的兴趣(因为大量的新手练手或者为了证明自己技术比你牛逼,再就是为了数据的价值)所以当你增加一定的反爬成本(可承受的开发时间,软硬件压力--稳定性在于增加逻辑后需要验证,验证码需要多次调用)是可以达到一定的反爬目的(是从服务器压力考虑还是数据安全性考虑来选取对应方法)

另外我们的app其实在抓包上,也就是第一步就比较有难度,已经可以阻挡大部分水平一般的爬虫了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值