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(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
  2. Windows 8 系列 --Block Game --随笔
  3. java 基础包的功能_Java 8的功能基础
  4. 指针和数组替换和区别
  5. 带你掌握不同平台下,探索JDK源码所需的native方法
  6. SAP License:SAP权限管理讲财务(二)-看懂财务报表
  7. 2.6.29的一个节省内存的补丁
  8. 看看这段代码有没有内存泄露?
  9. 计算机专业的男生喜欢你,男生真心喜欢你的五个表现
  10. R包中文文本挖掘chinese.misc的中文说明
  11. ARMv8/GICv3中断路由
  12. iOS 企业包无法安装
  13. Graboid蠕虫挖矿传播事件
  14. mysql 重量 什么类型_航空货物运输中的计费重量,指货物毛重与体积重量中的高者。...
  15. Unity CardboardVR应用在华为部分机型显示黑屏后自动退出
  16. 大数据企业战略规划高级培训课程
  17. .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)...
  18. Python调用阿里云数据库监控数据
  19. 辞职考研这两年(连续中……)
  20. 12864点阵型液晶显示屏的工作原理

热门文章

  1. 大四计算机系的,毕设该怎么下手?
  2. 杭电oj 2081 手机短号(C++)
  3. 普通人千万别把打工当赚钱,打工只是赚钱的一种方法
  4. 最简单DIY基于51单片机的舵机控制器
  5. android 监听多个广播,同一个广播接收器监听多个广播及多个广播接收器监听同一个广播...
  6. 不讨老婆之“不亦快哉”(三十三则)(李敖)
  7. storm32云台说明书_俄版SimpleBGC、Storm32开源三轴云台软硬件以及调参软件说明书-V1.02...
  8. 【C系列6.9】分手在雨季
  9. 项目里 基于solr搜索服务的认识
  10. GET /static/css/bootstrap.min.js.map HTTP/1.1“ 404GET /static/css/bootstrap.min.css.map HTTP/1.1“404