今天分享的内容是如何使用python下载歌曲和歌词信息,文章涉及内容主要为了帮助大家学习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] = idreturn music_infomusic_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 requestsdef 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 responseexcept 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] = idreturn 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面试真题
,复习时非常方便******