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 ...
随机推荐
- 通过CSS给图像设置圆角边框
<html> <style> .smaller-image{ border-radius: 50%; width: 100px; } </style> <bo ...
- 攻防世界——stegano
分析 1. 一个pdf,里边都是英文. 打开pdf "ctrl + F",检查flag 然活这里边直接告诉你,flag不在这里,一般都这么说了那就是真的不在了. 2. txt打开, ...
- VUE3 之 全局 Mixin 与 自定义属性合并策略 - 这个系列的教程通俗易懂,适合新手
1. 概述 老话说的好:心态决定命运,好心态才能有好的命运. 言归正传,今天我们来聊聊 VUE 中的全局 Mixin 与 自定义属性合并策略. 2. Mixin 的使用 2.1 全局 Mixin 之前 ...
- Spring-实现原理
探究SpringBoot实现原理 注意:必须完成SSM阶段源码解析部分的学习,链接:https://www.cnblogs.com/zwtblog/tag/源码/ 我们在前面的学习中切实感受到了Spr ...
- socket套接字模块及黏包现象
一.socket套接字模块 socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模 ...
- 5.Docker容器学习之新手进阶使用
@ 原文地址:点击直达 学习参考:https://yeasy.gitbooks.io/docker_practice/repository/registry.html 0x00 前言简述 描述: 本章 ...
- Java学习day38
Java内存:1.堆:存放new的对象和数组:可以被所有线程共享,不会存放别的对象引用 2.栈:存放基本变量类型(会包含这个基本类型的具体数值):存放对象的变量(会存放这个引用在堆里面的具体地址) 3 ...
- Redis4.0.14 迁槽失败
线上一个redis集群中主节点使用的内存达到了9.78g,按照redis单个实例最大内存不要超出10g的规范,扩容操作就放在了今天晚上进行.因为之前redis迁槽都是采用 redis-trib.rb ...
- vite初使用随记
vite的安装 按照官网文档来看,并不难. 先检查自己电脑node的版本与npm的版本/yarn的版本 可以直接用yarn安装,yarn create vite 这是最原始的安装,即类似于安装vue- ...
- GeoServer style中文乱码解决方法
在说明这个问题之前,有三点需要明确: 一是创建New style时,网页中文本框内的内容才是最终会应用到GeoServer的sld内容,这与本地sld文件没有关系. 二是xml的encoding定义的 ...