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,即可获取到页面信息,从页面中提取信息即可。

第二步:单条音乐播放时,网站发送了请求,在请求回调中返回了音乐文件的地址。

切换到载荷页签,可以看到params和encSecKey两个参数均是加密状态的数据。

根据关键词encSecKey来搜索一下脚本文件。通过ctrl+f再次搜索定位到这一行,params和encSecKey两个参数最终的位置定位到了。

具体代码为:

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敲击回车,查看方法定义,点击一下即可定位到脚本中实际的位置。

根据方法中的相互引用关系,将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逆向算是搞完了。下面来看一下效果。

python爬虫之JS逆向某易云音乐的更多相关文章

  1. python爬虫之JS逆向

    Python爬虫之JS逆向案例 由于在爬取数据时,遇到请求头限制属性为动态生成,现将解决方式整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs调用js文件(可见 ...

  2. python爬虫:了解JS加密爬取网易云音乐

    python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...

  3. Python爬虫—破解JS加密的Cookie

    前言 在GitHub上维护了一个代理池的项目,代理来源是抓取一些免费的代理发布网站.上午有个小哥告诉我说有个代理抓取接口不能用了,返回状态521.抱着帮人解决问题的心态去跑了一遍代码.发现果真是这样. ...

  4. python3爬虫应用--爬取网易云音乐(两种办法)

    一.需求 好久没有碰爬虫了,竟不知道从何入手.偶然看到一篇知乎的评论(https://www.zhihu.com/question/20799742/answer/99491808),一时兴起就也照葫 ...

  5. 我去!爬虫遇到JS逆向AES加密反爬,哭了

    今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那 ...

  6. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  7. Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...

  8. Python爬虫之JS异步加载

    一.判断异步加载方式(常用的JS库) 1. jQuery(70%) # 搜索 jquery 茅塞顿开 <script src="http://ajax.googleapis.com/a ...

  9. python爬虫执行js代码-execjs

    一.安装模块 pip install PyExecJS execjs会自动使用当前电脑上的运行时环境(建议用nodejs,与Phantomjs) 二.简单的使用 import execjs js_ob ...

随机推荐

  1. box-shadow 阴影的高级用法,多个阴影叠加

    box-shadow的这些用法你知道吗? $shadowH: ''; @for $i from 1 through 12 { $shadowH: #{$shadowH}, 0 ($i * 30px) ...

  2. FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言

    之前FastAPI(七十)实战开发<在线课程学习系统>接口开发--留言功能开发分享了留言开发,这次我们分享查看留言 梳理这里的逻辑,这个接口要依赖登录. 1.判断用户是否登录 2.判断对应 ...

  3. Wireshark查找与标记数据包

    查找数据包 按Ctrl-F. 查找数据包提供了4个选项: 显示过滤器(Display filter):该选项可以让你通过输入表达式进行筛选,并只找出那些满足该表达式的数据包.如:not ip, ip. ...

  4. Java基础之浅谈集合

    Java基础知识.关于List.Set.Map接口的了解,以及ArrayList.LinkedList.HashSet.TreeSet.HashMap.TreeMap...

  5. Spring MVC 工作原理和流程、注解

    Spring MVC 是实现MVC设计模式的企业级开发框架,是Spring框架的一个子模块,无需整合,开发起来更加便捷. MVC设计模式 MVC是一种设计模式,它将应用程序分为 Controller. ...

  6. linux运行二进制文件编写方式

    chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test. ...

  7. 十、包机制与JavaDoc

    一.包机制 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间. 包语句的语句格式为: package pkg1[. pkg2[. pkg3...]]; 一般使用公司域名倒置作为包名:例如 ...

  8. Markdown练习

    这是一级标题 这是二级标题 这是三级标题 这是无序列表1 这是无序列表2 有序1 有序2 重点 计网 1. 第一章 第一部分 1.概念.组成.功能和分类 1. 概念 计算机网络是互连的.自治的计算机的 ...

  9. mysql组提交

    当mysql开启binlog日志时,会存在一个内部XA的问题:事务在存储引擎层redo log的写入和binlog的写入一致性问题. mysql通过两阶段提交很好的解决了redo log和binlog ...

  10. (十一)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4(三)持久化

    一.前言 IdentityServer配合EFCore持久化,框架已经为我们准备了两个上下文: ConfigurationDbContext:配置数据(资源.客户端.身份等) PersistedGra ...