前言
Glidedsky 是一个爬虫闯关的网站,针对不同的水平的玩家,有着难度不同的关卡,基础爬虫,以及比较难的爬虫,用于练练手是挺适合的一个网站
这次呢,小编选取了其中的 “js加密1”这一关来带大家操作一下
题目与爬取网址
分析数据获取位置
先往下翻几页,看能不能找到对应了的数据,这里翻了两页后,发现数据是 XHR 标签栏里请求的,Preview 选项卡点开可看到此页的数据,到这里数据从哪里提取就找到了
分析请求
第二页的请求 url 及所带的请求参数如下
第三页的请求 url 及请求参数如下
对比这两页的请求 url 可以看到有三个参数是变化的,page,t,sign,而且每次都不一样,所以想要获取数据,那请求得带上它们才行,page 好理解就是页数,下面看 t,sign 怎么获取的
分析加密参数获取位置
通过打断点的方法来查看请求参数是怎么生成的,切换到 Sources 标签,在 XHR/fetch Breakpoints 这里点加号添加要打断点的 url,这里是请求数据的 url:
www.glidedsky.com/api/level/web/crawler-javascript-obfuscation-1/items
然后设置好打断点的 url 后,刷新网页,会看到页面呈灰色,最右边那一栏会有一些东西出现
其中的 call stack 是我们需要用来找生成参数的东西,它是一个显示调用堆栈的东西,从上往下的堆栈调用是离此断点由近到远的调用
我们需要从 call stack 从上往下慢慢找哪里像是参数生成的地方,这里到第四个堆栈就可以看到此处是生成参数的地方
到这里看到这几行 js 代码就知道这里是生成加密参数的地方了
加密参数获取
t 参数:
Math.floor()
为计算结果取整
$('main .container').attr('t')
从 html 源代码页面中的 class 为 container 的标签中获取 t 的值,这里的 html 是爬取的此页的 url,不是请求获取数据的那个 url
获得后再做运算就是所需的参数 t
sign 参数:
把鼠标放在调用的函数上可以看到调用的函数,点进去可以看到用算法生成的过程
正常情况下可以单独把调用的函数的 js 代码扣下来用,但此处这样做是用不了,因为这代码对方只是想让你看,不想让你复制粘贴就可用,所以直接扣是不行的
但从它调用的函数名可以看出是用了 sha1 算法加密生成的,所以我们可以用 js 写sha1 算法或 python 写 sha1 算法来生成我们的参数
Final
知道请求所需的加密参数怎么获取以后,就可以编写爬虫爬取 1000 页的数据了
-END-