前两天教了大家如何在控制台上找到真实的mp3播放地址,但是不可以下载付费的,因为只能下载可播放的歌曲。至于怎样下载付费网易云音乐,还是开个会员吧,要知道免费是最贵的的这个道理。

有粉丝看了前两天文章想用代码来装逼,我就为了满足他,特意去折腾了两天,终于写出来了,迫不及待与大家分享一把。不得不说,这里面坑很大,遇到几个大坑在那里折腾了几个小时,分享出来让大家想装逼的少踩点坑。废话不多说,开始今天主题!

1.寻找目标请求

打开网易云主页 ,打开开发者工具,点击搜索

是不是看到很多请求,不要慌,慢慢找。找了之后你会发现下面这个链接

这个链接返回的是json,里面包含的是歌曲的信息,但是没有MP3播放链接,这个或许有用,因为有歌曲的id,先放着。

我试着点击歌曲播放,又增加了几个请求。一看,里面就有我想要的MP3链接。

这样子,获取mp3请求的链接出来了,https://music.163.com/weapi/song/enhance/player/url?csrf_token=

可以看到是个post请求,状态码为200,我们接着往下看fromdata是什么数据。

是两个加密了的参数,不过不怕,如果你看过我之前写的利用python爬取网易云音乐,并把数据存入mysql你会发现fromdata参数是一样的,所以破解加密参数思路是一样的,不过这次我不用fiddler了,只用开发者工具来调试,看好了!!!我们看看这个请求的来源是什么。

点进去看看,是个混淆的js,点左下角可以格式化,这样好看点。

进行搜索params,你会发现这个:

可以看到,加密的方式都没有改变,还是和之前一样,只是变量名字改变了。window.asrsea()有四个参数,先看看后面三个参数,因为都很相似。继续进行搜索定位。

可以看出,返回的是一个固定的内容,所以不用管了,等下可以进行调试抓出来。再看看第一个参数。是一个json。我们可以进行断点调试进行获取。

进行刷新,你会看到下面这些内容。

可以看到window.asrsea()是一个d函数,定位过去看看,然后又给个断点。

点击去往下一个断点,你会看到

四个参数都出来了,我直接贴出来这里吧:

d:"{"ids":"[523946593]","br":128000,"csrf_token":""}"e:"010001"f:"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"g:"0CoJUm6Qyw8W8jud"

参数都出来了,很容易就知道d参数里面的ids对应的就是歌曲id,所以说刚才找的链接有用了。br是个固定值,对应的可能是歌曲的质量之类的,不需要管的。

下面再看看d函数是如何加密的:

里面又包含了很多 a , b ,c 的三个函数,先看看 a 函数

这个 a 函数是在一堆字符串中随机找出16个字符串。ok,下一个。

b 函数采用了 aes 加密, 加密的密文是 e ,也就是参数的 a 内容,c是密钥,第三个参数中有偏移量 d 和加密模式 CBC 。再看看 c 函数。

c 函数是采用 rsa 加密,b 为加密指数, 空字符串为解密参数,c 为加密系数。

好了,三个函数分析完毕,再回头看看 d 函数。

可以看到params参数是经过两次 b 函数生成的,也就是用 aes 加密两次,encSecKey参数是通过 c 函数生成的,也就是通过 rsa 加密方式生成的。

废话不多说,Talk is cheap, show me the code

2.代码部分

先把随机生成16个字符串的展示下

为了让大家好看点,代码以后都用照片代替

接下来是aes加密的

这里有一个巨坑,谷歌了也没发现有谁遇到过,就是用python进行aes加密的时候,只能加密数字和字母,不能对中文进行加密,会报错

Input strings must be a multiple of 16 in length

解决方方法是在cbc加密的模式下,在对字符串补齐为长度为16的倍数时,长度指标不能用中文,要先把他转为unicode编码的长度才可以。比如上面的,下面的就是错误示范

pad = 16 - len(text) % 16

此坑爬过去了,接着下一个rsa加密

还有需要注意一下的是,在生成随机16个字符串的时候,需要保证params和encSecKey两个参数是对应的这个随机字符串是一致的。要不然加密之后还是会出错,获取不了正确信息。好了,最后一个是获取两个加密参数。

代码写完了,那还等什么,运行一下装逼啊!

{‘code’: -460, ‘msg’: ‘Cheating’}

这下好了,装逼失败,被网易云认出来我是爬虫的,那我试试加下请求头?结果加了还是一个样,这个也算是个巨坑吧。解决方法还是加请求头,只需要加两个,一个是浏览器识别 user-agent ,另一个是 cookie ,想不到吧?我也想不到,居然还有在cookie上面做反爬的,但是我用了 session 来保持cookie还是不行,需要自己复制浏览的cookie就行保存才可以。

歌曲现在能下载了,可我要的是任意歌曲啊。那好,我们再去看看这个请求https://music.163.com/weapi/cloudsearch/get/web?csrf_token=,因为返回的是歌曲id。

3.寻找歌曲id

可以看到,参数还是和上面的那个请求的参数一样,但是我们知道的是那个 d 函数,后三个参数是不变的,所以我们只需要找前面那个变化的参数就可以了,还是同样的操作,断点调试

也是很容易就找到的,d 参数就是下面这个

d = ‘{“hlpretag”:”“,”hlposttag”:”“,”s”:”可能否”,”type”:”1”,”offset”:”0”,”total”:”true”,”limit”:”30”,”csrf_token”:”“}’

这个分析就可以说完毕了。

4.搜索歌曲代码

这个是获取歌曲 id 的代码,其他的没什么问题了。

最后

我还将程序打包了,遇到了喜欢的歌曲都可以下载下来,虽然可以直接用网易云下载,不用那么麻烦,但是我们学编程的是要干什么的?装逼啊,能用代码绝不用其他的东西。

效果图如上,下载杠杆的,需要完整代码的可以后台回复音乐即可送给你。

ps:原创不易,写了这篇文章可谓花费了我1024根头发,听说转发是生发的最有效之道,所以你懂得!

扫面二维码关注获取更多有趣的python文章

用Python代码来下载任意指定网易云歌曲(超详细版)相关推荐

  1. 用Python代码来下载任意指定网易云歌曲

    前两天教了大家如何在控制台上找到真实的mp3播放地址,但是不可以下载付费的,因为只能下载可播放的歌曲.至于怎样下载付费网易云音乐,还是开个会员吧,要知道免费是最贵的的这个道理. 有粉丝看了前两天文章想 ...

  2. 一行Python代码就可以下载任意网站视频,零基础小白也能轻松学会

    前言 对于Python爬虫很多人都不陌生,可以用它来批量下载文字.图片.视频等,其中涉及的知识点也是比较多的,但是Python中有一个方法,一行代码就能爬取任意网站上面的视频,只要你安装了Python ...

  3. 利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(三)(网内首发超详细版)...

    3.3 权限配置样例 注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义. * 对权限配置文件的修改立即生效,不必重启svn. 用户组格式: [groups] = , 其中,1个用户组可 ...

  4. python爬虫之网易云歌曲下载(需要js分析) -- 2020.06.20更新

    背景 目的 >>> 通过python + kivy打包一个简易的网易云会员歌曲下载软件; 初试 >>> 用you-get库里面的网易云接口来实现下载; 失败 > ...

  5. php下载到指定目录,下面这段代码如何下载到指定目录

    下面这段代码怎么下载到指定目录 /** * 抓取远程图片 * * @param string $url 远程图片路径 * @param string $filename 本地存储文件名 */ func ...

  6. 分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论

    转载自分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 原文无法显 ...

  7. Python新手爬虫训练小项目《爬取彼岸图网》(超详细讲解版)

    Python新手爬虫训练小项目<爬取彼岸图网>(超详细讲解版) 这是我的第一篇文章,作为一名新手爬虫,这个算是我这几天来的努力成果,虽然代码寥寥几行但花费了大半天,新手上路还是不能只看视频 ...

  8. 带你写爬虫(python)第二篇----抓取网易云音乐下面的评论(API方式)

    抓取网易云音乐<大学无疆>的评论 一直喜欢使用网易云音乐,网易云歌曲下面的评论给其加分不少,所以这一篇来写一下怎么抓取歌曲下面的评论. 准备工作 目标网页:http://music.163 ...

  9. Python利用selenium简单的爬取网易云歌曲排行榜

    最近学习了一下selenuim和XPath,技术还很菜,简单的爬取了一下网易云歌曲的排行榜信息,最后保存到mongodb里面 要爬取的部分如下图所示: 爬取每个歌曲的排名,名称,时长,歌手. 创建mo ...

最新文章

  1. 商汤涨涨涨涨:上市4日股价累涨130%,市值一度3000亿港元
  2. 小分子溶液当硬盘!布朗大学逆天研究:用代谢分子存储照片,准确率达99%
  3. jQuery css()选择器使用说明
  4. 如何保证电子邮件的安全
  5. (Object-C)学习笔记(一)--开发环境配置和与c语言的区别
  6. Flutter之Decoration
  7. 【默认加入持久化机制,防止消息丢失,v0.0.3】对RabbitMQ.Client进行一下小小的包装,绝对实用方便...
  8. TCP/IP网络编程之多种I/O函数
  9. WPF Telerik TreeListView样式设计
  10. 孤荷凌寒自学python第八十天开始写Python的第一个爬虫10
  11. SqlServer递归查询树形结果数据
  12. pgAgent couldn't get a connection to the database!
  13. echarts地图实现部分地区高亮
  14. 微软官方 Windows 10 更新安装失败的解决办法
  15. python研究生录取数据分析统计服_考研党必看!研究生报考录取比例数据查询方法...
  16. vscode设置默认浏览器
  17. Docker自学笔记 (二)
  18. idea连接mysql数据库下载驱动失败
  19. Definition of Spline Basis Function
  20. Pandas Dataframe 每隔n行取1行

热门文章

  1. python中的时间处理模块(二):datetime模块之timedelta类详解
  2. C++/模拟键盘输入/自动打字机/解放双手
  3. JavaScript正则表达式的学习
  4. 论文阅读_Same Coverage, Less Bloat: Accelerating Binary-only Fuzzing with Coverage-preserving Coverage-g
  5. 老板:你们和外包有什么区别?
  6. HTML前端静态网页制作
  7. 【DVB】DVB业务信息PSI/SI综述
  8. 背压(Backpressure)机制
  9. NodeMCU 通过MQTT 连接阿里云物联网
  10. 陈大好:持续创造小而美的产品丨独立开发者 x 开放麦