php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 426|回复: 0

python爬虫之JS逆向某易云音乐

[复制链接]

2658

主题

2665

帖子

9449

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
6669
贡献
0
注册时间
2021-4-14
最后登录
2024-5-7
在线时间
672 小时
QQ
发表于 2022-6-12 08:08:03 | 显示全部楼层 |阅读模式
Python爬虫之JS逆向采集某易云音乐网站

在获取音乐的详情信息时,遇到请求参数全为加密的情况,现解解决方案整理如下:

JS逆向有两种思路:

一种是整理出js文件在Python中直接使用execjs调用js文件(可见我的另一篇文章《 python爬虫之企某科技JS逆向》)。

一种是根据JS中的逻辑,使用Python重写相应的方法。(可见另一篇文章《爬虫之JS逆向》)

本文介绍的也是第一种思路,即从目标网站中提取JS文件,然后由Python中使用execjs调用,得到我们想要的数据。

需求:爬取音乐网站中的飙升榜数据https://music.163.com/#/discover/toplist

遇到的问题:在请求单条音乐详情时遇到请求参数均是加密的情况。

第一步:获取列表数据,此条没什么限制,跳过。

GET请求https://music.163.com/discover/toplist,即可获取到页面信息,从页面中提取信息即可。

第二步:单条音乐播放时,网站发送了请求,在请求回调中返回了音乐文件的地址。
feb9c10e076c9730cee7c65b70593ca9_505712-20220611213511251-1212893374.png
切换到载荷页签,可以看到params和encSecKey两个参数均是加密状态的数据。
6751a5d49eda6d2b13c9ce75b0b71622_505712-20220611213605308-864524571.png
根据关键词encSecKey来搜索一下脚本文件。通过ctrl+f再次搜索定位到这一行,params和encSecKey两个参数最终的位置定位到了。
d6732b63c39dcccf2c1cd1e4bdee68ca_505712-20220611213752089-1568307086.png
具体代码为:

var bKB3x = window.asrsea(JSON.stringify(i6c), buV0x(["流泪", "强"]), buV0x(Rg2x.md), buV0x(["爱心", "女孩", "惊恐", "大笑"]));
            e6c.data = j6d.cr7k({
                params: bKB3x.encText,
                encSecKey: bKB3x.encSecKey
            })

也就是说我们需要的params和encSecKey是由window.asrsea方法生成,此方法有四个参数,多次调试发现第一个参数与音乐属性相关,后三个参数均为固定的字符串。

在控制台输入window.asrsea敲击回车,查看方法定义,点击一下即可定位到脚本中实际的位置。
861686dc0da5d5de7d25371955d1c246_505712-20220611214142535-147969556.png
根据方法中的相互引用关系,将JS脚本中相应代码复制到一个JS文件中。

然后根据最终返回的需要,我们再定义一个方法来实现。
function get_params() {
    let d1 = {
        "ids": "[1945262840]",
        "level": "standard",
        "encodeType": "aac",
        "csrf_token": ""
    },
      
        d2 = buV0x(["流泪", "强"]),
        d3 = buV0x(Rg2x.md),
        d4 = buV0x(["爱心", "女孩", "惊恐", "大笑"]);
    let res = asrsea(JSON.stringify(d1), d2, d3, d4);
    return j6d.cr7k({
        params: res.encText,
        encSecKey: res.encSecKey,
    });
}

此处定义的get_parmas中音乐ID写死了的,这个后续可以改成动态的即可。

至此,这个音乐网站的JS逆向算是搞完了。下面来看一下效果。
a3d3b976d6a526a421cee38583737125_505712-20220611215111487-135827147.png





上一篇:DevOps落地实践点滴和踩坑记录-(1)
下一篇:一键解绑手机号关联账号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-5-8 23:40 , Processed in 0.180302 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表