爬虫JS逆向思路 --(几千块钱都学不到的思路)

网络上几千块都学不到的JS逆向思路这里全都有

本系列持续更新中,三连关注不迷路  

干货满满不看后悔

个人主页→数据挖掘博主ZTLJQ的主页

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python


本次要学习的是某榜的数据--本系列提供完整思路

首先我们打开网站,打开F12抓包工具,选择抓包工具中的网络选项,选择XHR抓动态数据。

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第1张图片

可以看到网站的数据是排行榜的类型(这个也算是找动态数据的经验)-- 后面会解释有什么用

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第2张图片

调整好抓包工具后 再次刷新网站 抓取动态数据(可以看到下面的数据)

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第3张图片

 这个网站的动态数据比较少,如果遇到比较多的动态数据,就可以根据上面我们判断我们要抓的是排行类型的数据,就可以直接定位到rank 排名的意思 找到数据接口

找到接口以后--- 点击接口中的预览 看是否有自己需要的数据(图片中已经显示 数据是我们需要的,那就表示已经找到了数据接口)

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第4张图片

接下来就是爬虫逆向的思路步骤了!!!

首先查看请求头是否有加密数据(图片中未发现有加密数据)

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第5张图片

 其次查看负载中是否有加密数据(图片中有加密数据)-- nonce与xyz都是加密的数据

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第6张图片

那么这个时候就需要我们去解决这个加密的数据了

使用全局搜索,搜索nonce找到加密这个参数的方法

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第7张图片

点击进入到源代码

然后Ctrl+F 搜索nonce (看到 nonce 打上断点调试)

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第8张图片

 调试后 可以看到 这个j()函数 就是nonce的加密方法

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第9张图片

 进入到 j()方法 将j()方法复制下来 

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第10张图片

这里需要注意一下,这里是单独把js扣下来,所以需要改一下,改成function j(),而不是直接复制下来就可以直接使用的。

function j() {
        for (var a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"], b = 0; b < 500; b++)
            for (var c = "", d = 0; d < 9; d++) {
                var e = Math.floor(16 * Math.random());
                c += a[e]
            }
        return c
}

console.log(j())

 打开pycharm 创建js文件  粘贴刚刚复制的j()方法 运行看看是否能模拟 网站生成nonce

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第11张图片

 运行成功

成功模拟出nonce以后 接下来就需要找xyz参数的生成方法

与找nonce同理 但是这里可以看到 是和nonce生成在同一个js 只是使用的是不同的方法

根据图片就可以发现,xyz的生成和d()函数是息息相关的,那么我们直接进入d()函数看看是什么样的

爬虫JS逆向思路 --(几千块钱都学不到的思路)_第12张图片

进入d函数以后可以看到,define里面一个关键字“md5”  这样就说明xyz应该是md5加密的  

接下来就2个思路,第一把整个d函数的js扣下来,用JS运行加密,第二就是用python直接模拟md5算法进行加密

我这里选择的是python直接模拟

但是这里还有一个问题就是,我们并不知道xyz到底是对哪一个参数进行了加密,这里我们就要对js进行调试了,如图我们调试发现,是对其他的全部参数进行加密(因为d()函数里面是h,定位h就是其他全部参数),那么我们就可以进行模拟了

 这里模拟要注意 获取时间的时候 是当前时间-2  因为这个网站是获取到2天之前的数据 

并且这里还需要注意一点,开始的时间和结束的时间一定要设置好然后和其他参数一起写入,再进行加密,代码如下:

# 获取当前时间
now_time = datetime.datetime.now()
end = (now_time + datetime.timedelta(days=-2)).strftime("%Y-%m-%d")
start = (now_time + datetime.timedelta(days=-2)).strftime("%Y-%m-%d")
pojie = '/xdnphb/main/v1/weibo_day/rank?AppKey=joker&end={}&rank_name=个人认证&rank_name_group=&start={}&nonce={}'.format(
    end, start, nonce)
hl = hashlib.md5()
hl.update(pojie.encode(encoding='utf8'))
md5 = hl.hexdigest()
xyz = str(md5)

data = {
    'end': end,
    'rank_name': '个人认证',
    'rank_name_group': '',
    'start': start,
    'nonce': nonce,
    'xyz': xyz
}

       本次的思路就这么多,这个系列会一直更新下去,之后我写的项目或者框架都会更新在这个系列中,希望大家多多支持。

       真诚的希望,这篇文章对大家有用,也希望大家能够学习到爬虫的精髓。✍✍✍

你可能感兴趣的:(爬虫JS逆向,python,网络爬虫,爬虫,js,算法)