python爬虫之JS逆向某易云音乐
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逆向某易云音乐的更多相关文章
- python爬虫之JS逆向
Python爬虫之JS逆向案例 由于在爬取数据时,遇到请求头限制属性为动态生成,现将解决方式整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs调用js文件(可见 ...
- python爬虫:了解JS加密爬取网易云音乐
python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...
- Python爬虫—破解JS加密的Cookie
前言 在GitHub上维护了一个代理池的项目,代理来源是抓取一些免费的代理发布网站.上午有个小哥告诉我说有个代理抓取接口不能用了,返回状态521.抱着帮人解决问题的心态去跑了一遍代码.发现果真是这样. ...
- python3爬虫应用--爬取网易云音乐(两种办法)
一.需求 好久没有碰爬虫了,竟不知道从何入手.偶然看到一篇知乎的评论(https://www.zhihu.com/question/20799742/answer/99491808),一时兴起就也照葫 ...
- 我去!爬虫遇到JS逆向AES加密反爬,哭了
今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那 ...
- 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析
作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...
- Python爬虫入门教程 21-100 网易云课堂课程数据抓取
写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...
- Python爬虫之JS异步加载
一.判断异步加载方式(常用的JS库) 1. jQuery(70%) # 搜索 jquery 茅塞顿开 <script src="http://ajax.googleapis.com/a ...
- python爬虫执行js代码-execjs
一.安装模块 pip install PyExecJS execjs会自动使用当前电脑上的运行时环境(建议用nodejs,与Phantomjs) 二.简单的使用 import execjs js_ob ...
随机推荐
- EMS查看邮箱容量限制的方法
以Exchange管理员身份打开EMS控制台.在PowerShell命令行提示符下,输入以下命令. Get-MailboxDatabase | FL name,IssueWarningQuota,Pr ...
- 基于nodejs中实现跨域的方法
一般情况下跨域是通过ajax的方式请求数据,通过js在不同的域之间进行数据传输或者通信: 只有通过ajax方式获取请求的时候才会有跨域问题需要解决: 例如在本地模拟两个服务端. 一个服务端去通过aja ...
- redis笔记补充
redis补充 这篇文章是redis入门笔记的补充. 1.info命令 用来显示服务的信息. info命令可以跟下面的选项: server: 关于 Redis 服务器的一些信息 clients: 客户 ...
- SpringMVC获取请求参数-集合类型
1.创建User实体类 ```java public class User { private String username; private int age; public String getU ...
- Linux内核--链表结构(一)
一.前言 Linux内核链表结构是一种双向循环链表结构,与传统的链表结构不同,Linux内核链表结构仅包含前驱和后继指针,不包含数据域.使用链表结构,仅需在结构体成员中包含list_head*成员就行 ...
- SpringMVC踩坑3——前后端传值问题
在前端页面点击修改,同时把需要修改的ID传到后端,后端根据ID去修改具体数据 这是前端代码 <a href="${pageContext.request.contextPath}/bo ...
- 设置网站标题时找不到index.html问题解决
都知道,修改网站标题在根目录index.html里修改.但是在vue3更新后,index.html就没有放这里了,放到了public中.去public中一眼就能看到.我也是去那里就找到了.
- 生成二维码,并且保存,指定位置的view成图片,并且保存到本地相册
效果图: 保存的图片效果是: 保存到本地的,是整个视图,不只是单单的二维码的图片, 在了解的一番过程之后,我知道了, 1.首先要去获取保存图片的写入权限:(使用 https://github.com/ ...
- Linux的软件安装tomcat 以及jdk
因为tomcat的启动需要jdk,所以我们先安装jdk,安装完成后再安装tomcat 具体的文件大家可以到官网下载,下面介绍安装步骤 目录 jdk安装 1.通过xftp或者其他方式将安装包传到我们的L ...
- HTML中的Hack手段之条件注释
通常WEB的好处就是可以跨平台,但这个世界偏偏有个另类,就是IE浏览器.在平常做HTML设计时,有时需要为IE的表示差异而不得不使用一些Hack手段.条件注释就是这类手段之一. 条件注释是IE浏览器的 ...