ZKX's LAB

几个复杂的反爬虫策略和应对方法

2020-12-30新闻15

自互联网不断发展以来,爬虫与反爬虫的战争从未停歇。今天天启IP给大家分享几个复杂的反爬虫策略,一起来看看吧~

(1)数据伪装

在网页上,爬虫工作者可以监听流量,然后模拟用户的正常请求。在这种情况下,某些网站会对数据进行一些伪装来增加复杂度。例如,在某网站上展示的价格为 299元,在 DOM 树中是以 CSS 进行了一些伪装。要想得到正确的数值,必须对 CSS 的规则进行一些计算才行。在这种情况下,使用爬虫必须要非常小心,因为很可能目标网站进行改版后,规则已经发生了变化,抓取到的数据便会无效。

(2)参数签名

APP 通过加密算法对请求的参数进行运算,从而得到一个签名。这个签名通常和时间戳相关,并且在请求中附加上时间戳。在请求的参数固定的情况下,能够在一小段时间内生效。当请求发送到服务端后,服务端对参数、时间戳进行验证,比较签名是否一致。如果不一致,则判断为非法请求。获取 APP 端的加密算法一般较为困难,通常需要进行反编译才能获得加密算法。

(3)隐藏验证

更复杂的反爬虫的方式之一是,隐藏验证。例如,在网站的防护上,通过 JavaScript 请求一些特殊的网址,可以得到一些特定的令牌(token),这样每次请求时即可生成不同的令牌。甚至有些网站会在不可见的图片加上一些特殊的请求参数,从而识别是否是真正的浏览器用户。这种情况下,想直接获取 API 进行请求通常行不通或者非常困难,只能通过 Chrome Headless 等工具模拟用户的行为,从而规避这种情况。

(4)阻止调试

有一类反爬虫策略比较特殊,一旦打开浏览器的控制台界面,就会无限触发浏览器的 debugger 指令。网站在一个名为 leonid-tq-jq-v3-min.js 中给所有的构造函数都加上了 debugger 这个关键字,导致任何对象的生成都会触发调试器。这样做的目的是阻止意外的脚本或程序进行跟踪调试,从而保护代码。这种情况下,可以构建一个修改过的js文件,去掉debugger关键字,使用 mitmproxy 转发流量并拦截 leonid-tq-jq-v3-min.js,将改后的 js 文件返回给浏览器,从而绕过这个限制。

#技术编程

qrcode
访问手机版