-
2021-01-14 23:37:27
python视频教程栏目介绍实现下载免费音乐
相关免费学习推荐:python视频教程
运行效果
代码# -*- coding:utf-8 -*-
import requests, hashlib, sys, click, re, base64, binascii, json, os
from Crypto.Cipher import AES
from http import cookiejar
"""
Website:http://cuijiahua.com
Author:Jack Cui
Refer:https://github.com/darknessomi/musicbox
"""
class Encrypyed():
"""
解密算法
"""
def __init__(self):
self.modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
self.nonce = '0CoJUm6Qyw8W8jud'
self.pub_key = '010001'
# 登录加密算法, 基于https://github.com/stkevintan/nw_musicbox脚本实现
def encrypted_request(self, text):
text = json.dumps(text)
sec_key = self.create_secret_key(16)
enc_text = self.aes_encrypt(self.aes_encrypt(text, self.nonce), sec_key.decode('utf-8'))
enc_sec_key = self.rsa_encrpt(sec_key, self.pub_key, self.modulus)
data = {'params': enc_text, 'encSecKey': enc_sec_key}
return data
def aes_encrypt(self, text, secKey):
pad = 16 - len(text) % 16
text = text + chr(pad) * pad
encryptor = AES.new(secKey.encode('utf-8'), AES.MODE_CBC, b'0102030405060708')
ciphertext = encryptor.encrypt(text.encode('utf-8'))
ciphertext = base64.b64encode(ciphertext).decode('utf-8')
return ciphertext
def rsa_encrpt(self, text, pubKey, modulus):
text = text[::-1]
rs = pow(int(binascii.hexlify(text), 16), int(pubKey, 16), int(modulus, 16))
return format(rs, 'x').zfill(256)
def create_secret_key(self, size):
return binascii.hexlify(os.urandom(size))[:16]
class Song():
"""
歌曲对象,用于存储歌曲的信息
"""
def __init__(self, song_id, song_name, song_num, song_url=None):
self.song_id = song_id
self.song_name = song_name
self.song_num = song_num
self.song_url = '' if song_url is None else song_url
class Crawler():
"""
网易云爬取API
"""
def __init__(self, timeout=60, cookie_path='.'):
self.headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'music.163.com',
'Referer': 'http://music.163.com/search/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
self.session = requests.Session()
self.session.headers.update(self.headers)
self.session.cookies = cookiejar.LWPCookieJar(cookie_path)
self.download_session = requests.Session()
self.timeout = timeout
self.ep = Encrypyed()
def post_request(self, url, params):
"""
Post请求
:return: 字典
"""
data = self.ep.encrypted_request(params)
resp = self.session.post(url, data=data, timeout=self.timeout)
result = resp.json()
if result['code'] != 200:
click.echo('post_request error')
else:
return result
def search(self, search_content, search_type, limit=9):
"""
搜索API
:params search_content: 搜索内容
:params search_type: 搜索类型
:params limit: 返回结果数量
:return: 字典.
"""
url = 'http://music.163.com/weapi/cloudsearch/get/web?csrf_token='
params = {'s': search_content, 'type': search_type, 'offset': 0, 'sub': 'false', 'limit': limit}
result = self.post_request(url, params)
return result
def search_song(self, song_name, song_num, quiet=True, limit=9):
"""
根据音乐名搜索
:params song_name: 音乐名
:params song_num: 下载的歌曲数
:params quiet: 自动选择匹配最优结果
:params limit: 返回结果数量
:return: Song独享
"""
result = self.search(song_name, search_type=1, limit=limit)
if result['result']['songCount'] <= 0:
click.echo('Song {} not existed.'.format(song_name))
else:
songs = result['result']['songs']
if quiet:
song_id, song_name = songs[0]['id'], songs[0]['name']
song = Song(song_id=song_id, song_name=song_name, song_num=song_num)
return song
def get_song_url(self, song_id, bit_rate=320000):
"""
获得歌曲的下载地址
:params song_id: 音乐ID.
:params bit_rate: {'MD 128k': 128000, 'HD 320k': 320000}
:return: 歌曲下载地址
"""
url = 'http://music.163.com/weapi/song/enhance/player/url?csrf_token='
csrf = ''
params = {'ids': [song_id], 'br': bit_rate, 'csrf_token': csrf}
result = self.post_request(url, params)
# 歌曲下载地址
song_url = result['data'][0]['url']
# 歌曲不存在
if song_url is None:
click.echo('Song {} is not available due to copyright issue.'.format(song_id))
else:
return song_url
def get_song_by_url(self, song_url, song_name, song_num, folder):
"""
下载歌曲到本地
:params song_url: 歌曲下载地址
:params song_name: 歌曲名字
:params song_num: 下载的歌曲数
:params folder: 保存路径
"""
if not os.path.exists(folder):
os.makedirs(folder)
fpath = os.path.join(folder, str(song_num) + '_' + song_name + '.mp3')
if sys.platform == 'win32' or sys.platform == 'cygwin':
valid_name = re.sub(r'[<>:"/\\|?*]', '', song_name)
if valid_name != song_name:
click.echo('{} will be saved as: {}.mp3'.format(song_name, valid_name))
fpath = os.path.join(folder, str(song_num) + '_' + valid_name + '.mp3')
if not os.path.exists(fpath):
resp = self.download_session.get(song_url, timeout=self.timeout, stream=True)
length = int(resp.headers.get('content-length'))
label = 'Downloading {} {}kb'.format(song_name, int(length/1024))
with click.progressbar(length=length, label=label) as progressbar:
with open(fpath, 'wb') as song_file:
for chunk in resp.iter_content(chunk_size=1024):
if chunk:
song_file.write(chunk)
progressbar.update(1024)
class Netease():
"""
网易云音乐下载
"""
def __init__(self, timeout, folder, quiet, cookie_path):
self.crawler = Crawler(timeout, cookie_path)
self.folder = '.' if folder is None else folder
self.quiet = quiet
def download_song_by_search(self, song_name, song_num):
"""
根据歌曲名进行搜索
:params song_name: 歌曲名字
:params song_num: 下载的歌曲数
"""
try:
song = self.crawler.search_song(song_name, song_num, self.quiet)
except:
click.echo('download_song_by_serach error')
# 如果找到了音乐, 则下载
if song != None:
self.download_song_by_id(song.song_id, song.song_name, song.song_num, self.folder)
def download_song_by_id(self, song_id, song_name, song_num, folder='.'):
"""
通过歌曲的ID下载
:params song_id: 歌曲ID
:params song_name: 歌曲名
:params song_num: 下载的歌曲数
:params folder: 保存地址
"""
try:
url = self.crawler.get_song_url(song_id)
# 去掉非法字符
song_name = song_name.replace('/', '')
song_name = song_name.replace('.', '')
self.crawler.get_song_by_url(url, song_name, song_num, folder)
except:
click.echo('download_song_by_id error')
if __name__ == '__main__':
timeout = 60
output = 'Musics'
quiet = True
cookie_path = 'Cookie'
netease = Netease(timeout, output, quiet, cookie_path)
music_list_name = 'music_list.txt'
# 如果music列表存在, 那么开始下载
if os.path.exists(music_list_name):
with open(music_list_name, 'r') as f:
music_list = list(map(lambda x: x.strip(), f.readlines()))
for song_num, song_name in enumerate(music_list):
netease.download_song_by_search(song_name,song_num + 1)
else:
click.echo('music_list.txt not exist.')相关免费学习推荐:php编程(视频)
更多相关内容 -
歌曲免费下载器
2019-02-13 14:04:03无损音乐免费下载器,打开软件 直接输入需要下载的歌曲,按回车即可 -
网易云音乐黑胶Svip歌曲免费下载3.0-易语言
2021-06-12 00:49:42把数据采集方式改成了json 搜索速度暴增 很多很多细节更新 新功能 大家下载了自己看 对了 现在批量下载 不会导致下载的都是同一首歌 部分特殊的或古老的歌曲 在歌词上面会出问题 -
qq正版音乐免费下载工具
2018-07-29 14:09:43能下载的格式:ape、flac、320k、mp3 v2.1 新增歌单解析 新增ape格式 歌单链接格式: https://y.qq.com/n/yqq/playlist/xxxxxxxxxx.html ... -
吾爱破解全网音乐MV下载小助手免费绿色版
2019-08-06 08:22:38全网音乐MV下载小助手是一款专为mv爱好者定制的全网音乐mv下载工具,全网音乐MV下载小助手功能强大,能够帮助大家快速解析音乐来源并进行在线下载,软件不仅能够下载音乐mv而且还能够下载歌词与歌曲相关信息,有需要... -
VK-Music-Downloader:从 VK.com 免费轻松下载音乐
2021-06-05 02:33:07VK音乐下载器 从 VK.com 免费轻松下载音乐 第 1 步:登录您的帐户。 第 2 步:输入搜索查询。 第三步:下载歌曲。 -
免费音乐下载网页模板
2021-01-22 17:39:44免费音乐下载网页模板 -
txt音乐播放器0.6.exe免费下载,基于C++
2020-05-25 17:20:49txt音乐播放器新版,就叫0.6版吧,免费源码地址在博客中,在git上: https://blog.csdn.net/BHSZZY/article/details/106336555 基于C++,用VS2017的MFC开发,用DirectSound。 -
免费音乐下载软件供娱乐
2019-04-17 11:31:30此版本可下载不少收费音乐,会被杀毒软件误杀,请放行,只供测试,请支持原创音乐~~~ -
deemix 无损音乐下载器 v2020.12.15免费版
2021-01-06 20:54:30为您提供deemix 无损音乐下载器下载,deemix(无损音乐下载器)是一款能够帮助用户下载中内外各种音乐的软件,支持下载互联网上的非常多的音乐,软件支持搜索和下载功能,有需要的可以下载使用。软件特色 deemix该... -
有什么软件可以免费下载歌曲?99%不知道这3款软件!
2021-05-26 09:24:36有什么软件可以免费下载歌曲?我们都知道,网络上现在大多数主流音乐软件或手机APP现在都有版权收费限制,在这里推荐几款比较好用的手机端的App和电脑端的一款播放器及下载歌曲的网站。 音乐狂:点击左侧链接下载 ...有什么软件可以免费下载歌曲?我们都知道,网络上现在大多数主流音乐软件或手机APP现在都有版权收费限制,在这里推荐几款比较好用的手机端的App和电脑端的一款播放器及下载歌曲的网站。
音乐狂:点击左侧链接下载
音乐狂是一款优秀的音乐播放软件,音乐狂电脑版支持各大音乐平台。音乐狂电脑版的强大的搜索引擎方便用户快速搜索到想要的内容,软件支持虾米音乐、网易云音乐、qq音乐、百度音乐搜索引擎。软件支持试听下载会员歌曲功能。它还为用户精心打造了数十个潮流榜单,软件拥有海量网络曲库。
点亮音乐:点击左侧链接下载
点亮音乐是一款专业的音乐播放软件,点亮音乐是一款相当于由4个主流音乐网站的合体,包括有网易云音乐、酷狗音乐、QQ音乐、酷我音乐这4大网站,保证让你可以免费下载你想要的歌曲,而且它所提供的这4个音乐网站,你还可以随意切换,是不是很简单。支持在线试听歌曲功能,它能够让用户查看音乐排行榜。
灵音播放器:点击左侧链接下载
灵音播放器是一款专注于提供无损音乐在线试听的软件。本软件是由原萝莉云的团队全新打造,在这里用户不仅可以体验到炫酷的界面,而且内置了多种主题和音效个人定制哟,用户可以轻松的调节音频和免费下载无损音乐。灵音播放器免费版提供了主流音乐格式播放和桌面歌词显示等功能,几乎所有的主流音乐格式都可以使用该播放器进行播放,用户可以轻松调节音频。
-
如何在电脑端免费下载歌曲?
2019-11-02 20:20:121.listen 1 ...下载好之后,一路next下来就可以了 安装完之后打开软件,就可以看到,listen 1 整合了网易云音乐、虾米音乐、QQ音乐、酷狗音乐、酷我音乐、咪咕音乐等多个音乐网站的资源,自己再也不需...1.listen 1
直接使用listen 1 找到全网最全的音乐。这个是其对应的官网链接,但不知为何有时候打不开,大家可以多尝试几次http://listen1.github.io/listen1/
下载好之后,一路next下来就可以了
安装完之后打开软件,就可以看到,listen 1 整合了网易云音乐、虾米音乐、QQ音乐、酷狗音乐、酷我音乐、咪咕音乐等多个音乐网站的资源,自己再也不需要因为一个网站里面没有自己想要的歌而去四处乱搜了。
2.音乐聚合搜索
http://www.gequdaquan.net/gqss/
这个网站非常的牛,只要是你从上面搜到的歌曲,这个网站都提供下载!!!!
3.墨灵https://music.qugeek.com/page/music
也是支持将搜索到的歌曲直接下载的
4.Music Tools
这个软件很好用,可以下载全网音乐,只是现在开始收费了,要花20块入群才给解压密码,因此不做过多考虑了。
贴上官网链接,有需要的自己去折腾了吧。
http://tool.yijingying.com/musictools/
5.鱼声音乐
这个APP也是可以直接下载全网的音乐的。
https://www.lanzous.com/i4k5w4f
-
用python可以免费下载音乐吗-Python 教你轻松下载网易音乐歌曲
2020-11-01 13:11:44正好今天周末,给大家发点福利,喜欢听音乐的同学有福了,这篇文章直接把网易云音乐歌手的热门歌曲 50 首全部免费下载下来。除了已经下架不在网易数据库的,其他的都能全部下载下来,咳咳,你懂的。给几张图,自己...前两篇文章收集了歌手信息和歌词,光有歌手信息和歌词没有歌曲怎么行,那不是耍流氓吗?正好今天周末,给大家发点福利,喜欢听音乐的同学有福了,这篇文章直接把网易云音乐歌手的热门歌曲 50 首全部免费下载下来。除了已经下架不在网易数据库的,其他的都能全部下载下来,咳咳,你懂的。给几张图,自己体会。
爬取结果:
直接下载:
但是个别几首歌如果已经下架的话,可以下载下来,但是听不了的,下架的歌曲毕竟是少数。
这次的代码很简单,因为上 2 篇文章已经把大部分前期工作做完了,还没上车的同学请戳以下两篇文章:
前面没弄懂的也没关系,文章底部会把前面两次的源码和爬虫结果文件的获取方式给出。
导包
之前的代码完成后,我们把它放在同一个目录下是可以直接导入并调用其方法的。务必要放在同一文件夹下面,这样调用才不会报错。本次我需要调用上次获取歌词的 lyrics163.py 文件,因为里面的 get_top50() 方法返回的信息有本次需要的歌曲 id。
用网页上显示的链接直接下载歌曲不可行。众里寻他千百度,终于被我找到了网易提供的外部的歌曲链接,输入相应歌曲的 id 拼接获取歌曲外部可下载的链接。
Python
songurl = 'http://music.163.com/song/media/outer/url?id={}.mp3'.format(songid)
1
songurl = 'http://music.163.com/song/media/outer/url?id={}.mp3'.format(songid)
下载歌曲
接下来就简单了,定义一个下载歌曲的函数就可以下载歌曲了。用 urlretrieve 下载音频文件,调用时入参填歌曲 url 和存放路径即可。
主函数
主函数,输入歌手对应的 id ,直接调用之前的保存歌词源码 lyrics163.py 里的方法获取歌曲 id,再调用上面的方法下载歌曲即可。保存路径提前建好,比如我在 E 盘新建了「song」目录,下载的歌曲都会保存在这个目录下。
这样,你想听哪个歌手的歌曲,输入歌手 id,运行此代码,分分钟 50 首热门歌曲下载到本地。是不是很轻松?
这波福利如何?赶紧转发分享给你的朋友们,让他们也享受这份音乐福利,因为一旦网易关闭这个外部下载链接,这个方法就不能下载歌曲了,当然,土豪请随意,哈哈!
公众号回复「歌曲」可获取:
1 第一次文章获取歌手信息的源码和热门歌手信息.csv文件
2 第二次文章的获取歌词文件的源码。
3 本篇文章的源码。
操作步骤:
1 运行 singer163.py 代码获取热门歌手信息,或者直接用我发的,效果一样。
2 运行 song 163.py 代码,从热门歌手信息文件查出你想下载歌曲的歌手 id,输入id,歌曲就保存在你定义的文件夹里了。
3 如果想下载歌词的话,运行 lyrics163.py 代码即可。
-
无损音乐免费下载电脑版
2018-11-03 11:54:09由落叶枫林开发的一款无损音乐下载工具,它以QQ音乐服务器为主体,支持QQ音乐上所有的音乐下载。传音最多可以解析出歌曲的十种音质,各种音质让你挑选。下载歌曲的方法很简单,只需要在歌曲上面左键单击一下,即可弹... -
吾爱音乐下载V1.0免费绿色版
2019-08-07 03:26:01该软件内置下载器,可以下载高品质音乐、无损音乐,以及MV等,而且全部免费。有了该软件,让你轻松听音乐,快来下载体验吧。 功能特性 1、无线搜索,永久免费; 2、支持批量下载; 3、可下载高品质、无损音质及匹配... -
音乐下载爬虫
2019-05-06 15:21:35百度音乐下载爬虫代码 -
Kizil:免费音乐下载程序。-开源
2021-05-04 03:09:08该程序合法,该程序的目的是文件共享,因此上载的文件属于安装程序。 您可以下载免费的音乐,程序存档将逐日增加,这是土耳其语制作的第一个音乐下载程序。 -
python下载音乐源代码
2018-07-12 13:45:26python下载音乐源代码,输入你想要下载的歌手的名字,你就可以下载 -
MC音乐网免费解析下载工具源码-易语言
2021-06-12 00:57:23刚刚吃瓜的时候看到52有人分享了MC音乐网的下载工具 就去看了一下 不难 随便写了一下,调用了精易模块 -
网易云黑胶Svip歌曲免费下载 2.0-易语言
2021-06-12 00:21:15现可以在线播放或下载 MV了 那么这个功能究竟有什么用呢 其实没什么用 闲得无聊就加上去了 现歌曲可批量下载 一些细节优化 -
无损音乐下载器
2018-11-16 16:04:58转可下载无损音质音乐,简单方便,用了很长时间了。 -
虚无DJ音乐,汽车DJ音乐免费下载
2022-05-26 12:47:42汽车DJ音乐免费下载,开车听音乐,DJ,怀旧 -
python 根据列表批量下载网易云音乐的免费音乐
2021-01-19 23:28:32运行效果 代码 # -*- coding:utf-8 -*- import requests, hashlib, sys, click, re, base64, binascii, json, os from Crypto.Cipher import AES from http import cookiejar ...Author:Jack Cui ... def __ -
在线音乐播放及下载
2015-08-17 16:08:03android在线音乐播放及下载,使用mediaplayer。 -
Allavsoft 视频下载软件 v3.23.0.7647免费版
2020-12-11 02:04:50软件特色 从100多个视频共享网站下载视频 Allavsoft支持视频分享网站下载电影,音乐视频,播放列表,运动视频,讲座等,以及100多个视频分享站点 一步下载并将在线视频文件转换为任何视频格式 除了以原始格式... -
免费下载音乐工具
2018-12-22 16:28:49免费下载音乐工具 -
免费WordPress 生活旅游音乐个人博客主题源码下载.zip
2021-12-21 14:20:51模板名称:免费WordPress 生活旅游音乐个人博客主题源码下载 该模板网站很容易吸引访客点击,提升ip流量和pv是非常有利的。 本套模板采用现在非常流行的全屏自适应布局设计,且栏目列表以简洁,非常时尚大气。 页面... -
优秀开源音乐项目---落雪音乐软件(免费听歌下载歌曲)
2020-11-29 00:00:39今天来介绍一个基于Electron的开源软件(音乐分享类型的) 有很丰富的的壁纸 而且这个软件还做了音乐推荐 还有试听列表 还有工具栏 -
抖音歌曲打包迅雷,车载歌曲免费下载网站,
2021-07-14 01:21:15在2020年,抖音出现了好多翻唱的中文歌曲,很多网友听了之后却找不到,十分苦恼。小编就为您整理了现在抖音最火的中文歌曲,快来看看是不是你要找的。 借此东风,很多素人秒变网红,而手法就是依靠制造新鲜好玩有趣... -
爱尚音乐播放器下载v1.2绿色免费版
2019-08-06 02:09:22爱尚音乐播放器是一款专门为对音乐效果有要求的用户提供的无损音乐免费播放软件,可以在线搜索全网无损音乐,并支持无损音乐免费下载功能,让你可以免费感受无损音乐的超高歌曲品质,支持歌手或歌曲搜索功能。...