0.目录

1.分析页面
2.获取歌曲的id
3.获取歌曲信息
4.获取歌曲图片url
5.获取歌词
6.总结
7.完整代码

1.分析页面

这一次我们来爬取网易云音乐,爬取歌单内的所有歌曲的图片和歌词,最终的结果是我们只要输入歌单的id,我们就可以直接下载歌单内所有歌曲的图片和歌词,并且以自己想要的命名格式统一命名。

上图是这次的演示歌单,id为973185551。每个歌曲也是有对应的id,通过右键检查第一首歌曲,可以发现这首歌的id为1370008169。


进入歌曲页面,检查图片,会发现图片的url与id是看不出有一点关系的,也就是我们只能进入到歌曲的页面才能获得图片的url。

2.获取歌曲的id

注意:想要爬取真正的页面信息,必须将原url中的 /# 删除,否则无法通过url得到正确的源代码。
原本的歌单url:https://music.163.com/#/playlist?id=973185551
更改后的url:https://music.163.com/playlist?id=973185551

# encoding: utf-8import requests
import re
import os
import json# 获取网页源代码
def get_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}response = requests.get(url, headers=headers)return response.text# 获得歌曲ID
def get_id(url_list):text = get_page(url_list)ids = re.findall(r'<li><a href=".*?id=(\d+)">.*?</a></li>', text, re.DOTALL)return idsdef main():url = 'https://music.163.com/playlist?id=973185551' # 歌单urlids = get_id(url)for id in ids:print(id)if __name__ == '__main__':main()

运行的部分结果:

我们可以发现,我们已经提取出了歌单里所有歌的id。

3.歌曲信息

同样的,我们想要得到网页源代码,就必须将 /# 去掉,变为:
view-source:https://music.163.com/song?id=1370008169

我们可以直接获取meta下的信息

<meta name="description" content="歌曲名《归寻》,由 等什么君 演唱,收录于《归寻》专辑中。《归寻》下载,《归寻》在线试听,更多相关歌曲推荐尽在网易云音乐" />
# 获取歌曲名
def get_name(url_song):text = get_page(url_song)song_name = re.findall(r'<meta name="description" content="歌曲名《(.*?)》,由 .*? 演唱.*?"/>', text, re.DOTALL)song_authors = re.findall(r'<meta name="description" content="歌曲名《.*?》,由 (.*?) 演唱.*?"/>', text, re.DOTALL)name = song_name[0] + ' - ' + song_authors[0]return name

运行的部分结果:

4.获取歌曲图片url

歌曲图片的url也在一个meta标签下

<meta property="og:image" content="http://p2.music.126.net/0Zh_vnKncMlY0So3LUxf7w==/109951164127088021.jpg" />
# 获得歌曲图
def get_img(url_song):text = get_page(url_song)url_img = re.findall(r'<meta property="og:image" content="(.*?)" />', text, re.DOTALL)[0]return url_img

运行的部分结果:

5.获取歌词

获取网易云音乐的歌词挺简单的,它们可以通过直接访问url获得。比如
http://music.163.com/api/song/lyric?id=1370008169&lv=1&kv=1&tv=-1
我们只需要改变id,就可以获得对应歌曲的歌词。

由于这一段信息是json格式,所以读取的时候可以使用json的方式直接获得歌词,并写入文件储存。

# 获取歌词
def get_lyric(id, name):url_lyric = "http://music.163.com/api/song/lyric?id=" + id + "&lv=1&kv=1&tv=-1"text = get_page(url_lyric)judge_lyric = re.findall(r'{"nolyric":true,.*?}', text, re.DOTALL)if judge_lyric:print(str(name) + '无歌词\n')else:# 用json获取歌词json_obj = json.loads(text)initial_lyric = json_obj['lrc']['lyric']root = "D://lyric//"path = root + name + '.lrc'try:if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):with open(path, 'w') as f:f.write(initial_lyric)f.close()except:return None

6.总结

当爬取网易云音乐的时候,网址出现的/#对我产生了很大的麻烦,白白浪费了三四个小时去修改我的访问方式,总在怀疑我是get用错了,又或者是headers写错了,对网页直接右键源代码也出现了问题。直到我去删除了网址中的/#,才正常的获得了源代码。使用正则去获取信息,主要是因为在获取简单的信息时,直接使用正则其实还是比较简单的,缺点是当歌曲变多后,使用正则会让程序执行速度变慢。


由于某些歌曲是无歌词的,所以我们需要添加判断是否有歌词的语句,否则会让程序在运行时报错。上图就是无歌词时,访问url的显示结果。偷懒一下,直接用正则匹配这一段,然后if判断时就会过,执行输出歌曲无歌词的提示,并让程序依旧正常运行。

7.完整代码

# encoding: utf-8import requests
import re
import os
import json# 获取网页源代码
def get_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}response = requests.get(url, headers=headers)return response.text# 获得歌曲ID
def get_id(url_list):text = get_page(url_list)ids = re.findall(r'<li><a href=".*?id=(\d+)">.*?</a></li>', text, re.DOTALL)return ids# 获取歌曲名
def get_name(url_song):text = get_page(url_song)song_name = re.findall(r'<meta name="description" content="歌曲名《(.*?)》.*?由 .*? 演唱.*?"/>', text, re.DOTALL)song_authors = re.findall(r'<meta name="description" content="歌曲名《.*?》.*?由 (.*?) 演唱.*?"/>', text, re.DOTALL)name = song_name[0] + ' - ' + song_authors[0]return name# 获得歌曲图
def get_img(url_song, name):text = get_page(url_song)url_img = re.findall(r'<meta property="og:image" content="(.*?)" />', text, re.DOTALL)[0]root = "D://pics//"path = root + name + '.jpg'try:if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):r = requests.get(url_img)with open(path, 'wb') as f:f.write(r.content)f.close()except:return None# 获取歌词
def get_lyric(id, name):url_lyric = "http://music.163.com/api/song/lyric?id=" + id + "&lv=1&kv=1&tv=-1"text = get_page(url_lyric)judge_lyric = re.findall(r'{"nolyric":true,.*?}', text, re.DOTALL)if judge_lyric:print(str(name) + '无歌词\n')else:# 用json获取歌词json_obj = json.loads(text)initial_lyric = json_obj['lrc']['lyric']root = "D://lyric//"path = root + name + '.lrc'try:if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):with open(path, 'w') as f:f.write(initial_lyric)f.close()except:return Nonedef main():url = 'https://music.163.com/playlist?id=391228182' # 歌单urlids = get_id(url)names = []fns_num = 1num = len(ids)for id in ids:url_song = 'https://music.163.com/song?id=%s' % idname = get_name(url_song)get_img(url_song, name)get_lyric(id, name)names.append(name)print("\r完成进度: {:.2f}%".format(fns_num * 100 / num), end="")fns_num += 1print('\n\n完成名单:')for i in names:print(i)print('\n\n查找到的数量:' + str(num))print('\n最终完成的数量:' + str(len(names)))if __name__ == '__main__':main()

运行的部分结果:



注:由于其中一首歌的名字出现“/”斜杠,导致文件无法储存,文件的命名格式是不能出现“/”。可以通过添加以下语句,将“/”转换成“、”。

s = "【贰婶/流浪的蛙蛙/HITA/冥月】世伪知贤 (用原创发声) - 贰婶、流浪的蛙蛙、HITA、冥月"
s = s.replace('/','、')

python爬虫之爬取网易云音乐的歌曲图片和歌词相关推荐

  1. python音乐相册_python爬虫之爬取网易云音乐的歌曲图片和歌词

    0.目录 1.分析页面 2.获取歌曲的id 3.获取歌曲信息 4.获取歌曲图片url 5.获取歌词 6.总结 7.完整代码 1.分析页面 这一次我们来爬取网易云音乐,爬取歌单内的所有歌曲的图片和歌词, ...

  2. python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜

    利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...

  3. 【Python爬虫】爬取网易云音乐,打造音乐下载器

    目录 搭建窗口 爬虫实现下载音乐 歌曲搜索 下载歌曲 绑定命令 生成可执行文件 感想 在前一篇文章,正好总结过了Tkinter以及canvas画布的使用,学以致用,用Tkinter来创建一个窗口,在此 ...

  4. Python爬取网易云音乐歌手歌曲和歌单(爬虫)

    Python爬取网易云音乐歌手歌曲和歌单 是 仅供学习参考 Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地 ①找到要下载歌手歌曲的链接,这里用的是: https://music.16 ...

  5. Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学)

    下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息. 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的. URL:全部歌单 - 歌单 - 网易云 ...

  6. python听歌识曲爬虫_Python爬取网易云音乐热门评论的搜索结果-阿里云开发者社区...

    网易云音乐评论爬虫(三):爬取歌曲的全部评论 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的 ...

  7. Python爬虫——selenium爬取网易云评论并做词云

    大家好!我是霖hero 到点了上号网易云,很多人喜欢到夜深人静的时候,在网易云听音乐发表评论,正所谓:自古评论出人才,千古绝句随口来,奈何本人没文化,一句卧槽行天下!评论区集结各路大神,今天我们来爬取 ...

  8. Python爬取网易云音乐辑的图片、专辑名和专辑出版时间

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:阿里波特 来源:CSDN Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 h ...

  9. 来跟我学爬虫,爬取网易云音乐的邓紫棋歌单MP3,注意:VIP歌曲不可以爬取

    @Author:Runsen 我又回来了写几个爬虫案例了,这次是写一个简单的爬虫,我来教你如何爬取网易云音乐的歌单MP3,正所谓下载一个mp3很麻烦,你们的女朋友想听歌,秀即使帮她爬取所有MP3,从此 ...

最新文章

  1. python语言的数据类型有哪些_Python语言有哪些数据类型
  2. 评估指标:ROC,AUC,Precision、Recall、F1-score
  3. ASP.NET获取客户端IP及MAC地址
  4. 为TIF、JPG图片添加地理坐标/平面直角坐标
  5. wxWidgets之wxGrid控件
  6. IA-32 Architecture: the function of segment regitster(CS DS SS ES)
  7. LeetCode 1560. 圆形赛道上经过次数最多的扇区
  8. 基于Consul的数据库高可用架构【转】
  9. django 1.8 官方文档翻译:13-3 日志
  10. Android UI:机智的远程动态更新策略
  11. 印刷(烫金)缺陷在线检测系统
  12. 计算机软件技术信息安全哪个好,国内哪个大学的计算机安全专业最好?
  13. 使用vue -cli脚手架构建项目组件的全局注册与本地注册
  14. JavaWeb在线聊天系统开发
  15. 乘业绩创新高的东风,董明珠续任格力董事长几无悬念
  16. 降噪滤波器的简单使用
  17. 利用IPv6看清晰流畅的网络电视
  18. Github年度百大框架排行榜
  19. shiro反序列化漏洞学习(工具+原理+复现)
  20. UE使用技巧之---去空格

热门文章

  1. 你以为打上马赛克就安全了吗?用Python一键还原,了解一下?
  2. 核对(checking)与测试 (testing) -- Part 1
  3. 笔记本电脑找不到计算机配置,笔记本电脑上的设置不见了怎么办
  4. java主要城市时区对照表(包含时区显示)
  5. linux环境下写的C,一元二次方程示例
  6. 计算机接入因特网有几种方式有哪些,简述几种因特网的接入方式?
  7. 强连通分量分解详解 超级详细
  8. 阿里云交互式分析与Presto对比分析及使用注意事项
  9. 说说程序员不解风情的瞬间
  10. Office 2013