快捷搜索: 王者荣耀 脱发

爬虫与反爬的常见套路

当前常见的爬虫、反爬虫“套路”

一些网站的反爬虫手段

【1】亚马逊

  1. 亚马逊在一个爬虫的请求只包含ip,不包含cookie的情况下,会先允许爬取。在短时间内请求次数达到一定次数之后(如16个线程,每个线程各20个请求,每秒的请求数达到3个以上),会开始出现爬取失败的情况,且爬取失败的情况出现频率会逐渐增加,不会一下都访问不了。请求被阻止后会来到验证码页面进行人机识别的确认。若攻破验证码继续爬取,则有可能触发亚马逊的黑名单机制,将此ip加入黑名单。触发黑名单机制主要取决于你爬取的时间(白天or黑夜),以及ip的信誉度(亚马逊能识别你的ip是代理ip,云的ip还是住家ip,住家ip的信誉度会比较高)
  2. 在请求头里加上user-agent, cookie, accept, accept-encoding, accept-language后,触发防爬虫robotcheck的可能性降低,但在短时间内达到一定访问次数后(阈值高于情况1)依旧会触发验证码页面。若攻破验证码继续爬取,依旧按情况1的原则触发黑名单机制。

【2】猫眼电影 猫眼电影里,对于票房数据,展示的并不是纯粹的数字,而是在页面中使用了font-face定义了字符集,并通过unicode去映射展示。也就是说,除去图像识别,必须同时爬取字符集,才能识别出数字。

并且,每次刷新页面,字符集的url都是有变化的,无疑更大难度地增加了爬取成本。

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

而在去哪儿的移动端,他们重新定义了字符集,如下图,将3与1的顺序刚好调换得来的结果

当一个请求被识别为爬虫之后,业内通常应对的措施有:

  1. 不予理睬;
  2. 通过验证码机制进行人机判断;
  3. 配置黑名单,封锁IP;
  4. “投毒”策略,被识别为爬虫的请求依旧可以访问到目标页面,但页面里返回的某些信息是错误的;

由上述三个事例可以看出,像猫眼电影、去哪儿网采取的防爬虫措施可以应对多数爬虫的爬取且几乎对用户体验没有恶意影响。如果他们字符集的映射算法被攻击者破译,这一层防御其实也就被攻破了。但这层防御是否被攻破,从猫眼电影、去哪儿网这一侧也无法感知(根据目前查到的资料,不知道猫眼电影、去哪儿网是否有别的反爬虫策略)。而像亚马逊的防爬虫策略其实是并不严格的,就算被识别出是爬虫,只要单位时间内请求的次数不超过限定值,亚马逊是允许爬虫进行信息获取的。同时亚马逊也使用验证码机制进行缓冲,不是简单的立即对爬虫所用的IP进行封杀。

总结

爬虫和反爬虫的博弈是一个无止境的过程。所谓上有政策下有对策,攻击者总有方法绕过防御采取新的攻击方式,更有甚者不惜投入庞大资金雇佣人力来对某些网站的信息进行“人肉爬取”,可谓防不胜防。所以,反爬虫工作也是一个长期的任务,需要从简单到复杂一步步来实施。

经验分享 程序员 微信小程序 职场和发展