下面我将详细讲解“python 根据列表批量下载网易云音乐的免费音乐”的完整攻略。
1. 确认目标
首先要明确目标,即要批量下载的音乐是网易云音乐的免费音乐,而且我们需要提供一个音乐链接列表。
2. 安装必要的库
接着需要安装两个必要的Python库,一个是requests,用于获取API数据,另一个是pydub,用于处理音频文件。
pip install requests
pip install pydub
3. 获取API数据
我们需要从网易云音乐的API中获取免费音乐相关的数据。首先打开网易云音乐API文档,在其中搜索“免费”,找到免费音乐获取的API接口:/top/song
,其中type=0
代表获取全部免费音乐。
import requests
url = 'http://localhost:3000/top/song?type=0' # 修改为API接口地址
response = requests.get(url)
data = response.json()['data']
这里需要注意,为了安全起见,我们可以在本地搭建NeteaseCloudMusicApi服务器,然后通过接口地址获取数据。
4. 解析API数据
接下来,将API返回的数据解析成下载链接列表。
download_links = []
for song in data:
if song['fee'] == 0: # 判断是否为免费音乐
song_id = song['id']
url = f'http://localhost:3000/song/url?id={song_id}' # 获取音乐下载链接的API接口
response = requests.get(url)
download_url = response.json()['data'][0]['url']
download_links.append((song['name'], download_url)) # 记录歌曲名和下载链接
这里我们需要先判断音乐是否为免费音乐,然后通过/song/url
接口获得音乐的下载链接,并将名称和链接存储在一个列表中,便于后面下载。
5. 批量下载音乐
最后,使用pydub库下载音乐。
from pydub import AudioSegment
for name, link in download_links:
response = requests.get(link)
audio_content = response.content
audio = AudioSegment.from_file(io.BytesIO(audio_content)) # 将bytes转换为AudioSegment格式
audio.export(name + '.mp3', format='mp3') # 导出为mp3格式文件
这里我们需要使用requests
库获取音乐文件的二进制数据,然后将二进制数据转换为AudioSegment
格式,最后使用export
方法将音乐导出为mp3格式文件。这里以歌曲名称作为文件名。
示例
下面是两个使用示例:
示例一:下载前10首免费音乐
import requests
from pydub import AudioSegment
import io
url = 'http://localhost:3000/top/song?type=0'
response = requests.get(url)
data = response.json()['data'][:10] # 只获取前10首免费音乐
download_links = []
for song in data:
if song['fee'] == 0:
song_id = song['id']
url = f'http://localhost:3000/song/url?id={song_id}'
response = requests.get(url)
download_url = response.json()['data'][0]['url']
download_links.append((song['name'], download_url))
for name, link in download_links:
response = requests.get(link)
audio_content = response.content
audio = AudioSegment.from_file(io.BytesIO(audio_content))
audio.export(name + '.mp3', format='mp3')
示例二:下载指定歌手的所有免费音乐
import requests
from pydub import AudioSegment
import io
singer_id = '6452' # 小姐姐杨紫
url = f'http://localhost:3000/artist?id={singer_id}'
response = requests.get(url)
data = response.json()['hotSongs']
download_links = []
for song in data:
if song['fee'] == 0:
song_id = song['id']
url = f'http://localhost:3000/song/url?id={song_id}'
response = requests.get(url)
download_url = response.json()['data'][0]['url']
download_links.append((song['name'], download_url))
for name, link in download_links:
response = requests.get(link)
audio_content = response.content
audio = AudioSegment.from_file(io.BytesIO(audio_content))
audio.export(name + '.mp3', format='mp3')
这里我们通过/artist
接口获取指定歌手的热门歌曲列表,然后统计免费音乐的下载链接,并下载。这里以小姐姐杨紫为例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 根据列表批量下载网易云音乐的免费音乐 - Python技术站