今天分享的内容是如何使用python下载歌曲和歌词信息,文章涉及内容主要为了帮助大家学习python技能,请大家合规合理使用。
首先,我们想要批量下载歌曲,那么需要找到下载源,我这里使用的是某钟音乐网,首页是这样的
我们去爬取数据,通常都是分为几个步骤:分析目标网站的特征–>获取里列表–>通过列表中的数据–>获取具体的内容。
-
分析目标网站特征:
-
1)歌手信息:
我们刷新首页,抓包的时候,看到这个接口是有返回接口数据的,但很快就会发现,这个接口只返回了18个歌手的信息,我们不能通过这个方式来得到歌手的信息;经过分析网站上的多个页面,我并没有找到现成的接口可以获取到。
既然没有现成的接口,那么我们能不能通过解析页面html源码来得到歌手信息呢?答案是可以的,我在页面的html源码中找到了歌手的标签。可以通过bs4这个第三方库来解析html源码得到。(这里不扩展,等后面有空了,再专门写一篇关于bs4的文章吧)
- 2)获取歌手下的歌曲信息:
嘿嘿,这个接口妥妥的有现成的,我已经给大家找到了。我们只需要拼接接口地址,加上歌手名字就可以得到该歌手在该网站上的所有歌曲了。
- 3)获取歌曲的下载地址:
这个也是有现成接口地址的,我们只需要将歌曲id替换成步骤2)中得到的歌曲id即可。
- 4)获取歌词信息:
这个也是有现成接口地址的,我们只需要将歌曲id替换成步骤2)中得到的歌曲id即可。
- 代码编写
好了,现在所需的准备工作我们已经做好了,接下来就是开始写代码了。
- 1)根据歌手名字获取歌曲信息
# 获取张碧晨的所有歌曲信息
url = "https://music-api.tonzhon.com/songs_of_artist/张碧晨"
def get_music_info(url):
music_url = get_url(url).json()
songs_list = music_url['songs']
music_info = {}
if len(songs_list) > 0:
for item in songs_list:
name = item['name']
id = item['newId']
music_info[name] = id
return music_info
music_info = get_music_info(url)
- 2)使用歌曲id获取歌曲下载地址
base_url = "https://music-api.tonzhon.com/song_file/{}"
def get_music_download_url(music_info_list,base_url):
for name,id in music_info_list.items():
url = base_url.format(id)
response = get_url(url).json()
if response:
try:
download_url = response['data']
print(f"歌曲: {name}\n下载地址:https:{download_url}")
except Exception as e:
print(f"歌曲【{name}】已下线,地址:{url}")
music_info_list = get_music_info(music_url)
get_music_download_url(music_info_list,base_url)
- 3)封装下载文件的函数,后续放在步骤2)中调用
# 下载歌曲
def download_music(url,file_name):
response = get_url(url)
print(response)
with open(file_name,'wb') as f:
f.write(response.content)
- 4)封装下载歌词文件的函数,然后再步骤2)中调用
# 下载歌词
def get_music_lyric(id,name):
lrc_base_url = "https://music-api.tonzhon.com/lyrics/{}"
lrc_url = lrc_base_url.format(id)
response = get_url(lrc_url).json()
try:
lrc_content = response['data']
lrc_name = "E:\\音乐下载\\"+name + '.lrc'
with open(lrc_name,'w') as f:
f.write(lrc_content)
print(f"【{name}】的歌词下载完成")
except Exception as e:
print(e)
print(f"【{name}】的歌词内容不存在,地址:{lrc_url}")
- 5)将所有代码精简整合到一起
import time
import requests
def get_url(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return response
except Exception as e:
print(e)
return None
# 根据歌手名字获取歌曲信息
def get_music_info(geshou_name):
url = "https://music-api.tonzhon.com/songs_of_artist/{}".format(geshou_name)
music_url = get_url(url).json()
songs_list = music_url['songs']
music_info = {}
if len(songs_list) > 0:
for item in songs_list:
name = item['name']
id = item['newId']
music_info[name] = id
return music_info
# 下载歌曲
def download_music(url,file_name):
response = get_url(url)
with open(file_name,'wb') as f:
f.write(response.content)
# 下载歌词
def get_music_lyric(id,name):
lrc_base_url = "https://music-api.tonzhon.com/lyrics/{}"
lrc_url = lrc_base_url.format(id)
response = get_url(lrc_url).json()
try:
lrc_content = response['data']
lrc_name = "E:\\音乐下载\\"+name + '.lrc'
with open(lrc_name,'w') as f:
f.write(lrc_content)
print(f"【{name}】的歌词下载完成")
except Exception as e:
print(e)
print(f"【{name}】的歌词内容不存在,地址:{lrc_url}")
def get_music_main(music_info_dict):
for name,id in music_info_dict.items():
# 先下载歌曲
song_base_url = "https://music-api.tonzhon.com/song_file/{}"
url = song_base_url.format(id)
response = get_url(url).json()
if response:
try:
download_url = "https:"+response['data']
print(f"歌曲: {name}\n下载地址:{download_url}")
file_name = "E:\\音乐下载\\"+name + '.mp3'
download_music(download_url,file_name)
print(f"【{name}】的歌曲文件下载完成")
except Exception as e:
print(f"【{name}】歌曲不存在,地址:{url}")
# 再下载歌词文件
get_music_lyric(id,name)
if __name__ == '__main__':
# 根据歌手名字获取歌曲信息,存放入字典
music_info_dict = get_music_info("张碧晨")
# 根据歌曲信息下载歌曲和歌词
get_music_main(music_info_dict)
执行效果如下:
欢迎感兴趣的小伙伴长期关注、点赞、转发
最后 如果你对Python感兴趣的话,可以试试我整理的这份Python全套学习资料,【点击这里】领取!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
① Python所有方向的学习路线图
,清楚各个方向要学什么东西
② 100多节Python课程视频
,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例
,学习不再是只会理论
④ 华为出品独家Python漫画教程
,手机也能学习
⑤ 历年互联网企业Python面试真题
,复习时非常方便******