前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Glidedsky 爬虫挑战 | js 加密1

Glidedsky 爬虫挑战 | js 加密1

作者头像
用户6825444
发布2019-12-18 11:54:01
2.9K0
发布2019-12-18 11:54:01
举报
文章被收录于专栏:木下学Python木下学Python

前言

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-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木下学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档