由于这两年信息泄露的普遍,各网站(尤其是存储相对重要数据的网站)的反爬力度逐渐增强,采集数据的难度也随之直线上升,这第一篇先来了解一下较普遍的反爬措施:JS加密
我们来攻克的第一个网站:中国空气质量在线监测分析平台:https://www.aqistudy.cn/html/city_detail.html
我自己使用的是google浏览器,置于环境在开篇文章已经列举了以下,下面的一些包什么的,用到什么就装什么就可以了。
下面的整个过程我会很详细的写出来,喜欢研究爬虫的可以仔细往下看真个过程的处理,单纯想要解决问题的可以直接看部分代码,在以后的文章中可能就不会把步骤写的这样详细了,会慢慢的简化,毕竟太啰嗦的东西,没人喜欢去看。。。
第一步,打开页面,F12
嗯,,还是比较干净的,,但是千万不要被表象所迷惑了,越干净的页面,可能爬的难度就越大。。。
果然,往下一看,POST请求中一个参数,返回的也是一串不知道什么的东西,到这里就知道了,数据已经被加密了,果然不是这么简单
请求参数.png
返回值.png
那么接下来就让我们一步一步来解决他吧。。。
第一步,我们打开sources,右面的面板中的Event Listener,展开下面有个mouse,再展开有个click,选中它,然后点击上面的搜索:
鼠标点击事件.png
接下来,让我们看一下数据从请求到返回的整个过程是怎样的:
搜索之后会出现下面这项的画面,我们可以看到右面面板的Call Stack,这里面就标明了你执行到具体步骤的源文件,想要看的清楚地话,需要先一下左下角的花括号:格式化。上面的小符号就是进入下一步,或者按F11,找到相关内容
搜索事件执行过程.png
很久之后,终于看到了想要看到的东西:
获取数据的方法.png
这里有个getData的方法,下面还有getAQIData,getWeatherData,字面的意思就能看懂了,获取XXX数据。
恰巧,这两个方法就在getData下面,接下来就要分析这3个方法了:
getData什么没有,不用看
看一下下面的两个方法:
getAQIData.png
getWeatherData.png
很简洁的两个方法,而且惊人的相似,看代码的意思就是定义了method、param两个变量,然后传入getServerData这个方法中,返回了一个data对象,下面解析这个对象先暂时不看。
那就再去找getServerData就好了:
继续点点点、不过这样实在是太累了啊,我的毅力可能不太好了,那就再换个方法吧:既然我们已经定位到这个方法名了,那肯定就在某一个角落会出现这个方法,接下来我们这样做:
我们吧注意力转移到最右边的 “X” 号,旁边的三个点那里,点一下,找到下面的Search,再点一下,下面会出现一个新的窗口,在搜索框中输入我们要找的方法:
查找方法.png
哎!看到了两个文件中都有这个方法,其中文件1就是我们刚才看到调用方法的地方,剩下的就只有文件2中的了,居然是jquery这个文件,
不管了,先点进去看一下吧!
getServerData.png
看的出来,这是一种JS的常见加密方式:混淆加密,先了解一下这种加密方式:
JS反混淆
进入这个反混淆网站,顺便加个书签,方便以后再用:https://www.bm8.com.cn/jsConfusion/
把getServerData所在的字符串所在的方法:eval;整个复制,然后格式化,复制出来放到Notepad++里面,东西也很多,我们再次搜索一下:getServerData,终于找到这个方法,我们来看一下:
终于看到我们最开始发出的请求链接了,在这里是一个Ajax请求,请求参数就传入了一个:d:param
那这个param不难发现,在上面通过一个getParam方法获取,getParam方法传入了method, object两个变量,返回了一个param,这个param就是我们需要的东西。那我们再继续找一下getParam这个方法,刚好就在上面。。。。。。
参数加密.png
不用解释也应该能看明白了,就是把几个传入的参数跟定义的几个固定参数拼接加密,然后再讲整个param通过Base64跟AES加密,最后返回。
再回到刚才的getServerData中的Ajax请求,发出请求成功后返回的data,又经过了一个方法decodeData,继续往上看就会看到这个方法:
返回数据解析.png
这个也不难理解,传入data后经过了AES、DES、BASE64三种解密方式,最终得到返回数据。
至次,整个分析的过程已经完成了,对上面整个篇幅描述的东西可以简单整理,不想看整个过程的朋友可以看下面这句话:
发出一个带了经过Base64、AES加密后的参数的post请求,返回了经过AES、DES、BASE64三次解密的data。
接下来由于篇幅过长,分两篇来发,具体试下部分看下一篇。
网友评论