python音乐相册_python爬虫之爬取网易云音乐的歌曲图片和歌词
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-8
import 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, text, re.DOTALL)
return ids
def main():
url = 'https://music.163.com/playlist?id=973185551' # 歌单url
ids = 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下的信息
# 获取歌曲名
def get_name(url_song):
text = get_page(url_song)
song_name = re.findall(r'', text, re.DOTALL)
song_authors = re.findall(r'', text, re.DOTALL)
name = song_name[0] + ' - ' + song_authors[0]
return name
运行的部分结果:
4.获取歌曲图片url
歌曲图片的url也在一个meta标签下
# 获得歌曲图
def get_img(url_song):
text = get_page(url_song)
url_img = re.findall(r'', 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-8
import 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, text, re.DOTALL)
return ids
# 获取歌曲名
def get_name(url_song):
text = get_page(url_song)
song_name = re.findall(r'', text, re.DOTALL)
song_authors = re.findall(r'', 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'', 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 None
def main():
url = 'https://music.163.com/playlist?id=391228182' # 歌单url
ids = get_id(url)
names = []
fns_num = 1
num = len(ids)
for id in ids:
url_song = 'https://music.163.com/song?id=%s' % id
name = 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 += 1
print('\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音乐相册_python爬虫之爬取网易云音乐的歌曲图片和歌词相关推荐
- python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜
利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...
- python爬虫网易云音乐评论再分析_爬取网易云音乐的评论后,竟有这种发现!
原标题:爬取网易云音乐的评论后,竟有这种发现! 作者 | 志颖 责编 | 胡巍巍 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条. 现在 ...
- python爬虫之爬取网易云音乐的歌曲图片和歌词
0.目录 1.分析页面 2.获取歌曲的id 3.获取歌曲信息 4.获取歌曲图片url 5.获取歌词 6.总结 7.完整代码 1.分析页面 这一次我们来爬取网易云音乐,爬取歌单内的所有歌曲的图片和歌词, ...
- 来跟我学爬虫,爬取网易云音乐的邓紫棋歌单MP3,注意:VIP歌曲不可以爬取
@Author:Runsen 我又回来了写几个爬虫案例了,这次是写一个简单的爬虫,我来教你如何爬取网易云音乐的歌单MP3,正所谓下载一个mp3很麻烦,你们的女朋友想听歌,秀即使帮她爬取所有MP3,从此 ...
- 【Python爬虫】爬取网易云音乐,打造音乐下载器
目录 搭建窗口 爬虫实现下载音乐 歌曲搜索 下载歌曲 绑定命令 生成可执行文件 感想 在前一篇文章,正好总结过了Tkinter以及canvas画布的使用,学以致用,用Tkinter来创建一个窗口,在此 ...
- python爬虫网易云音乐评论再分析_Scrapy爬取网易云音乐和评论(一、思路分析)...
目录: 前提: scrapy这个框架很多人用过,网上教程也很多,但大多就是爬爬小说这种比较简单且有规律的.尤其大多网站它是可以通过点击下一页的方式爬取下一页,我看到的教程也都是这样的.而网易云的按钮光 ...
- Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学)
下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息. 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的. URL:全部歌单 - 歌单 - 网易云 ...
- PHP爬虫爬取网易云音乐热门评论
说起爬虫,恐怕第一个想到的都是Python,PHP的就少之又少. 得空闲下来,自己用PHP做了一个爬虫,爬取网易云音乐的热门评论. 效果图: 下面简单说一下思路 首先,在网易云官网排行榜内,审查元素, ...
- python爬音乐评论生成词云图_python爬虫+词云图,爬取网易云音乐评论
又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...
最新文章
- Angular的HttpClient注入
- How to install sharepoint server 2010 sp2 in window 7 x64
- yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
- c++设计成员变量可动态调整的动态类结构
- java中entry_Java FastMap.Entry方法代码示例
- 百度之星 1004 Labyrinth
- Windows 7 Ultimate Download (Windows 7 旗舰版下载)
- 网站备案 ICP备案流程
- GP数据库锁表如何解锁
- 【转】用java将pdf转换成jpg图片的代码
- 线性回归之最小二乘法(高斯-马尔可夫定理)
- 【渗透技巧】pop3协议渗透
- c语言手写平衡二叉树非递归实现
- excel 删除重复项_在Excel 2007中删除重复项
- springmvc案例
- 计算机内存占用过高,电脑内存占用高怎么办 Win7内存占用高解决办法
- 图像数据标准化与归一化
- Tushare 学习 - tushare pro使用
- 【网安神器篇】——mimikatz系统取证工具
- 数理统计与数据分析第三版习题 第4章