VIP音乐下载,播放

在我们听歌的时候,总是被各种会员的限制,导致无法听到完整的音乐。当然有的人单单喜欢通过软件去听歌,这里面有很多优质评论可以看。但是当我们想下载一首歌的时候,不是会员就没有办法实现了。在这里给大家介绍一下如何通过python来实现软件vip音乐的下载。。

一、分析网址

(1)搜索音乐网址分析

如下,我们以检索“周深”为例:通过Fetch/XHR找到网址为http://www.xxxx.cn/api/www/search/searchMusicBykeyWord?key=%E5%91%A8%E6%B7%B1&pn=1&rn=20&httpsStatus=1&reqId=8d9c7880-b12d-11ed-ae17-a1e6fcda1289,这里key后面写的就是搜索的名称,pn代表页数,rn代表每页显示的音乐条数。后面的可以不考虑,最后分析搜索的网址为http://www.xxxx.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=20

(2)音乐的源址

点击播放一首歌曲,然后点击network->media,可以查看播放歌曲的源码,如下:
源码地址为:https://ls-sycdn.xxxx.cn/44e4a52eb5fc53900864a5d0620fa57c/63f38b19/resource/n3/32/21/2372595038.mp3

记住这个源码的格式,Ctrl+F去寻找这个源码,发现在PlayUrl这个地址中包含了这个源码从而确定信息交互时采用的地址。

这个地址为:http://www.xxxx.cn/api/v1/www/music/playUrl?mid=261942443&type=music&httpsStatus=1&reqId=4b9b5111-b130-11ed-8a64-c94e3438e075。通过分析这个地址,我们可以得出这个网址中的关键字段mid,如果获取到它,他们所有音乐的源码地址我们都将可以获取到,从而实现VIP音乐的下载。

二、代码分析

(1)伪造用户登录界面

很多网站都是带有反爬机制,当你使用自动化一直访问一个网址,那么他就会检测出来,并做出相应处理,因此我们通过带用户表示去访问一个网址。
首先分析头headers,通过上述我们搜索界面进行分析。

因此在这里构建一个请求头:
User-Agent:表示浏览器的版本信息。当服务器收到浏览器的这个请求后,会经过一系列处理,返回一个数据包给浏览器,而响应头里就会描述这个数据包的基本信息。
Host:请求的主机地址
Referer:表示当前页面是通过此来源页面里的链接进入的。
Cookie:很多和用户相关的信息都存在 Cookie 里,用户在向服务器发送请求数据时会带上。
csrf':跨站点请求伪造信息

header = {'User-Agent': 'Chrome/107.0.0.0 Safari/537.36','Host': 'www.xxxx.cn','Referer': 'http://www.xxxx.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6','Cookie': '_ga=GA1.2.759282231.1676731363; _gid=GA1.2.81167573.1676731363; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1676731361,1676778763; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1676786566; kw_token=Q3XXTYYVGYK','csrf': 'Q3XXTYYVGYK'}

(2)返回检索音乐信息

综上分析的检索音乐网址,构造代码如下:

import requests
import re
import urllib# 1.伪装浏览器构造
# User-Agent:
header = {'User-Agent': 'Chrome/107.0.0.0 Safari/537.36','Host': 'www.xxxx.cn','Referer': 'http://www.xxxx.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6','Cookie': '_ga=GA1.2.759282231.1676731363; _gid=GA1.2.81167573.1676731363; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1676731361,1676778763; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1676786566; kw_token=Q3XXTYYVGYK','csrf': 'Q3XXTYYVGYK'}
key = '邓紫棋'
page = 1
# 1.向接口发送请求,从获取json数据中获取音乐id(rid)/歌曲名字/歌手  key:搜索歌手名字、page:爬取的第几页
url = 'http://www.xxxx.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=1'.format(str(key), str(page))
# 将请求的数据转为json格式,方便我们通过字典的形式提取数据。
music_data = requests.get(url, headers=header).json()
print(music_data)

执行结果为,里面包含了检索到的歌曲信息:

D:\WorkPlace\venv\Scripts\python.exe D:\WorkPlace\Music\kuwo_test.py
{'code': 200, 'curTime': 1676907553761, 'data': {'total': '305', 'list': [{'musicrid': 'MUSIC_39515638', 'barrage': '0', 'artist': 'G.E.M.邓紫棋', 'mvpayinfo': {'play': '0', 'vid': '7593309', 'download': '0'}, 'pic': 'https://img4.kuwo.cn/star/albumcover/120/36/57/1029628864.jpg', 'isstar': 0, 'rid': 39515638, 'duration': 219, 'score100': '95', 'content_type': '0', 'track': 0, 'hasLossless': False, 'hasmv': 1, 'album': '上古情歌 电视剧原声带', 'albumid': '3668654', 'pay': '16515324', 'artistid': 5371, 'albumpic': 'https://img4.kuwo.cn/star/albumcover/120/36/57/1029628864.jpg', 'originalsongtype': 1, 'songTimeMinutes': '03:39', 'isListenFee': False, 'pic120': 'https://img4.kuwo.cn/star/albumcover/120/36/57/1029628864.jpg', 'name': '桃花诺-《上古情歌》电视剧片尾曲', 'online': 1, 'payInfo': {'nplay': '001111', 'play': '1100', 'overseas_nplay': '001111', 'local_encrypt': '1', 'limitfree': '0', 'refrain_start': '73975', 'feeType': {'song': '1', 'album': '0', 'vip': '1', 'bookvip': '0'}, 'ndown': '111111', 'download': '1111', 'cannotDownload': '0', 'overseas_ndown': '111111', 'cannotOnlinePlay': '0', 'listen_fragment': '0', 'refrain_end': '101975', 'tips_intercept': '0'}}]}, 'msg': 'success', 'profileId': 'site', 'reqId': '6452deca1f87b5dc8689d526d9af39e5', 'tId': ''}Process finished with exit code 0

(3)提取mid,歌曲名称,歌手名称

我们的主要是提取mid值也就是上面获取的vid值,同时获取歌曲名称以及歌手来协助我们进行音乐的存储。代码如下,歌曲遍历:

for id in music_data['data']['list']:rid = id['rid']singer = id['artist']song_name = id['name']print(rid, singer, song_name)

执行结果为:

D:\WorkPlace\venv\Scripts\python.exe D:\WorkPlace\Music\xxxx_test.py
39515638 G.E.M.邓紫棋 桃花诺-《上古情歌》电视剧片尾曲Process finished with exit code 0

(4)根据获取到的mid值,套入分析过的地址中获取音乐源码网址

    base_url = 'https://www.xxxx.cn/api/v1/www/music/playUrl?mid={}&type=convert_url'.format(str(rid))response = requests.get(base_url, headers=header).json()print(response)

此时执行结果为,包括歌曲源码地址https://nn01-sycdn.xxxx.cn/dc9b8e825e5c8f1896cf005de164492d/63f3961f/resource/n3/22/32/2480823959.mp3,这样我们就可以进行下一步音乐下载了:

D:\WorkPlace\venv\Scripts\python.exe D:\WorkPlace\Music\xxxx_test.py
{'code': 200, 'msg': 'success', 'reqId': '1fe4ff0c0c6e3aa8ba0a2766d0de77a6', 'tId': '', 'data': {'url': 'https://nn01-sycdn.xxxx.cn/dc9b8e825e5c8f1896cf005de164492d/63f3961f/resource/n3/22/32/2480823959.mp3'}, 'profileId': 'site', 'curTime': 1676908063429, 'success': True}Process finished with exit code 0

(5)在下载之前,我们首先对获取到的歌手名称及歌曲名称格式进行一个处理,以免保存失败。

        #提取源码song_url = response['data']['url']# 对音乐播放地址再次发送请求获取二进制内容数据song_content = requests.get(song_url).content# 将歌名或者作者名当中的奇怪符号去掉,防止保存singer1 = re.sub('[\\/:?*<>"|]', '', singer)song_name1 = re.sub('[\\/:?*<>"|]', '', song_name)

(6)处理后,编写下载语句urllib

urllib.request.urlretrieve:URL 中的网络资源拷贝到本地(网址,拷贝到本地地址)

    try:print('正在下载', song_name)urllib.request.urlretrieve(song_url, './网易歌单/%s.mp3' % song_name)print('下载成功....')except:pass

三、完整代码

代码

import requests
import re
import urllib# 1.伪装浏览器构造
# User-Agent:
header = {'User-Agent': 'Chrome/107.0.0.0 Safari/537.36','Host': 'www.xxxx.cn','Referer': 'http://www.xxxx.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6','Cookie': '_ga=GA1.2.759282231.1676731363; _gid=GA1.2.81167573.1676731363; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1676731361,1676778763; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1676786566; kw_token=Q3XXTYYVGYK','csrf': 'Q3XXTYYVGYK'}
key = '邓紫棋'
page = 1
# 1.向接口发送请求,从获取json数据中获取音乐id(rid)/歌曲名字/歌手  key:搜索歌手名字、page:爬取的第几页
url = 'http://www.xxxx.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=5'.format(str(key), str(page))
# 将请求的数据转为json格式
music_data = requests.get(url, headers=header).json()
for id in music_data['data']['list']:rid = id['rid']singer = id['artist']song_name = id['name']# 根据音乐id拼接音乐地址,发送请求返回json并获取音乐播放地址base_url = 'https://www.xxxx.cn/api/v1/www/music/playUrl?mid={}&type=convert_url'.format(str(rid))response = requests.get(base_url, headers=header).json()song_url = response['data']['url']# 对音乐播放地址再次发送请求获取二进制内容数据song_content = requests.get(song_url).content# 将歌名或者作者名当中的奇怪符号去掉,防止保存singer1 = re.sub('[\\/:?*<>"|]', '', singer)song_name1 = re.sub('[\\/:?*<>"|]', '', song_name)try:print('正在下载', song_name)urllib.request.urlretrieve(song_url, './歌单/%s.mp3' % song_name)print('下载成功....')except:pass

执行测试

测试结果:

D:\WorkPlace\venv\Scripts\python.exe D:\WorkPlace\Music\xxxx_test.py
正在下载 桃花诺-《上古情歌》电视剧片尾曲
下载成功....
正在下载 倒数-好好的爱你
下载成功....
正在下载 多远都要在一起
下载成功....
正在下载 喜欢你
下载成功....
正在下载 泡沫
下载成功....Process finished with exit code 0


可以点击播放。

总结

之前一直在搞网易云歌曲,但是网易云反爬设置很强,导致一直不能实现VIP歌曲的下载,我在这里可以把普通歌曲下载的方式放在这里,如果有小伙伴搞定也分享一下给我。谢谢!下一节,我们创建一个下载音乐的小工具,做到真正的学以致用。

创建音乐下载器-代码实现相关推荐

  1. Tkinter写一个音乐下载器

    直接上源码: # 导入模块 from tkinter import * import requests import jsonpath import os from urllib.request im ...

  2. 【趣味编程】第1期。用python做简易版音乐下载器

    目录 前言 爬虫部分 完整代码 前言 那废话不多说,先了解准备工作. 1.先下载python,可以搜索python官网,到官网里面下载 2.下载外置模块 第一种方法,按win+R,输入cmd,然后输入 ...

  3. 【Python】PyQT5+爬虫实现简单音乐下载器

    PyQT5+爬虫实现简单音乐下载器 Qt-Designer界面设计music.ui: music.py代码实现: 采用PyUIC将music.ui转为music.py,代码如下: # -*- codi ...

  4. 小练一下实现音乐下载器

    声明 该软件仅供学习和交流,该软件代码和测试早在2020 9 15 完成,在2020 9 17 上传博客致csdn.由于个别不良分子盗取博客,污染互联网环境.该博客于直接被csdn下架,现在本博主重新 ...

  5. 5. 超炫酷的爬虫源代码-vip音乐下载器

    文章目录 1. 准备工作 2. 安装第3方库 2.1 os 库 2.2 tkinter库 2.3 webbrowser 库 2.4 requests 库 2.5 PySimpleGUI 库 2.6 r ...

  6. Python自制音乐下载器,实现听歌自由

    前言 今天发的就是最实用的文章–让你用Python实现听歌自由,不用再担心自己的钱包了 文章末尾名片可直接领取代码 代码实现 导入模块 import os import re from urllib ...

  7. 利用python自己动手制作一个音乐下载器,想听什么歌自己下就好了。

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 一.前言 之前大家有没有过从电脑上下载歌曲MP3文件放到手机内存卡的经历,随着时代 ...

  8. 现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器

    前言 之前大家有没有过从电脑上下载歌曲MP3文件放到手机内存卡的经历,随着时代发展,现在的各大音乐软件已经成为播放器,下载音乐是要收费的,现在教大家从零开始可以通过python通过爬虫爬取音乐,教大家 ...

  9. Python3爬虫——用selenium获取歌曲id,做一个音乐下载器

    我们之前已经学习了selenium的简单实用,现在就来实战下,我们通过selenium获取歌曲的id,然后通过网易云音乐的外链地址来下载音乐,做一个音乐下载器(此项目仅供教学使用),下面我们先来看一下 ...

最新文章

  1. 【 MATLAB 】向量化编程实践(一)
  2. 华为云 和 阿里云 跨服务器搭建Hadoop集群
  3. Qt Creator使用灯光
  4. postman进阶之Newman,从安装到使用到填坑,不废话
  5. LTV(CLV)模型的实战案例
  6. 关于汉语转换拼音的组件
  7. asp.net网站后台退出后,点后退按钮仍能进,如何安全退出
  8. 一文读懂数字通信系统的本质
  9. 又一款代替PanDownload的百度网盘不限速下载工具利器 – 雷鸟下载
  10. Go测试远控免杀学习
  11. ORACLE OCM备考之外部表管理使用非压缩属性脚本报错KUP-04095与权限
  12. 邮储银行计算机岗位笔试题,中国邮政储蓄银行各类岗位笔试经验汇总
  13. 深圳python 培训班价格
  14. android声音播放函数双声道合并,Android音频编辑之音频合成功能
  15. html首页我的待办,我的待办.html
  16. 《宏观经济学》第四章
  17. SUN J2EE企业应用技术学习计划
  18. 《大象:thinking in uml 》(第二版) 3章 UML核心元素 3节 用例
  19. 网络销售-----让客户绝对产生购买欲望的二十个技巧(一)
  20. linux安装TensorFlow-GPU版本 非常详细安装必看

热门文章

  1. mysql导入csv文件 第一行有问题_mysql 导入 csv文件中数据,只能导入第一行
  2. Java将文件上传到ftp服务器
  3. 一文详说怎么打开和使用caj文件,以及caj是什么格式的文件
  4. 实现mysql百度式查询_Python + MySQL 批量查询百度收录
  5. Pytorch CrossEntropyLoss和NLLLoss
  6. dotdotdot.js文字超出隐藏常用功能记录
  7. ORA-08002: 序列 SEQ_XXX.CURRVAL 尚未在此会话中定义
  8. 全部常用邮件端口25、109、110、143、465、995、993、994
  9. Spring Boot+Spring Cloud实现itoken项目
  10. 如何巧妙的更改ip核中的参数 以及parameter localparameter,`define 的区别