手把手教你使用Python抓取QQ音乐数据(第四弹)
off999 2024-12-30 06:06 31 浏览 0 评论
【一、项目目标】
通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。
通过手把手教你使用Python抓取QQ音乐数据(第二弹)我们实现了获取 QQ 音乐指定歌曲的歌词和指定歌曲首页热评。
通过手把手教你使用Python抓取QQ音乐数据(第三弹)我们实现了获取更多评论并生成词云图。
此次我们将将三个项目封装在一起,通过菜单控制爬取不同数据。
【二、需要的库】
主要涉及的库有:requests、openpyxl、html、json、wordcloud、jieba
如需更换词云图背景图片还需要numpy库和PIL库(pipinstall pillow)
如需生成.exe需要pyinstaller -F
【三、项目实现】
1.首先确定菜单,要实现哪些功能:
①获取指定歌手的歌曲信息(歌名、专辑、链接)
②获取指定歌曲歌词
③获取指定歌曲评论
④生成词云图
⑤退出系统
代码如下:
class QQ():
def menu(self):
print('欢迎使用QQ音乐爬虫系统,以下是功能菜单,请选择。\n')
while True:
try:
print('功能菜单\n1.获取指定歌手的歌曲信息\n2.获取指定歌曲歌词\n3.获取指定歌曲评论\n4.生成词云图\n5.退出系统\n')
choice = int(input('请输入数字选择对应的功能:'))
if choice == 1:
self.get_info()
elif choice == 2:
self.get_id()
self.get_lyric()
elif choice == 3:
self.get_id()
self.get_comment()
elif choice == 4:
self.wordcloud()
elif choice == 5:
print('感谢使用!')
break
else:
print('输入错误,请重新输入。\n')
except:
print('输入错误,请重新输入。\n')
第一行创建类,第二行定义菜单函数,这里用了类的实例化,里面所有函数的第一个参数都是self,我认为实例化更方便传参数;
whiletrue使菜单无限循环;
Try...except...使循环不会因报错而退出;
其他代码为设置输入不同数字对应打开不同函数。
2.封装项目(一)为get_info()
代码如下:
def get_info(self):
wb=openpyxl.Workbook()
#创建工作薄
sheet=wb.active
#获取工作薄的活动表
sheet.title='song'
#工作表重命名
sheet['A1'] ='歌曲名' #加表头,给A1单元格赋值
sheet['B1'] ='所属专辑' #加表头,给B1单元格赋值
sheet['C1'] ='播放链接' #加表头,给C1单元格赋值
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
name = input('请输入要查询的歌手姓名:')
page = int(input('请输入需要查询的歌曲页数:'))
for x in range(page):
params = {
'ct':'24',
'qqmusic_ver': '1298',
'new_json':'1',
'remoteplace':'sizer.yqq.song_next',
'searchid':'64405487069162918',
't':'0',
'aggr':'1',
'cr':'1',
'catZhida':'1',
'lossless':'0',
'flag_qc':'0',
'p':str(x+1),
'n':'20',
'w':name,
'g_tk':'5381',
'loginUin':'0',
'hostUin':'0',
'format':'json',
'inCharset':'utf8',
'outCharset':'utf-8',
'notice':'0',
'platform':'yqq.json',
'needNewCode':'0'
}
res = requests.get(url,params=params)
json = res.json()
list = json['data']['song']['list']
for music in list:
song_name = music['name']
# 查找歌曲名,把歌曲名赋值给song_name
album = music['album']['name']
# 查找专辑名,把专辑名赋给album
link = 'https://y.qq.com/n/yqq/song/' + str(music['mid']) + '.html\n\n'
# 查找播放链接,把链接赋值给link
sheet.append([song_name,album,link])
# 把name、album和link写成列表,用append函数多行写入Excel
wb.save(name+'个人单曲排行前'+str(page*20)+'清单.xlsx')
#最后保存并命名这个Excel文件
print('下载成功!\n')
3.封装项目(二)为get_id()和get_lyric
代码如下:
def get_id(self):
self.i = input('请输入歌曲名:')
url_1 = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
# 这是请求歌曲评论的url
headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
params = {'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'txt.yqq.song', 'searchid': '71600317520820180', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', 'n': '10', 'w': self.i, 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0'}
res_music = requests.get(url_1,headers=headers,params=params)
json_music = res_music.json()
self.id = json_music['data']['song']['list'][0]['id']
# print(self.id)
def get_lyric(self):
url_2 = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg'
# 这是请求歌曲评论的url
headers = {
'origin':'https://y.qq.com',
'referer':'https://y.qq.com/n/yqq/song/001qvvgF38HVc4.html',
'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
params = {
'nobase64':'1',
'musicid':self.id,
'-':'jsonp1',
'g_tk':'5381',
'loginUin':'0',
'hostUin':'0',
'format':'json',
'inCharset':'utf8',
'outCharset':'utf-8',
'notice':'0',
'platform':'yqq.json',
'needNewCode':'0',
}
res_music = requests.get(url_2,headers=headers,params=params)
js_1 = res_music.json()
lyric = js_1['lyric']
lyric_html = html.unescape(lyric) #用了转义字符html.unescape方法
# print(lyric_html)
f1 = open(self.i+'歌词.txt','a',encoding='utf-8') #存储到txt中
f1.writelines(lyric_html)
f1.close()
print('下载成功!\n')
这里特别说一下下载歌词的headers里必须加上’origin’和’referer’,要不爬下来数据。
4.封装项目(三)为get_comment()和wordcloud()
代码如下:
def get_comment(self):
page = input('请输入要下载的评论页数:')
url_3 = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
f2 = open(self.i+'评论.txt','a',encoding='utf-8') #存储到txt中
for n in range(int(page)):
params = {'g_tk_new_20200303': '5381', 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'GB2312', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0', 'cid': '205360772', 'reqtype': '2', 'biztype': '1', 'topid': self.id, 'cmd': '6', 'needmusiccrit': '0', 'pagenum':n, 'pagesize': '15', 'lasthotcommentid':'', 'domain': 'qq.com', 'ct': '24', 'cv': '10101010'}
res_music = requests.get(url_3,headers=headers,params=params)
js_2 = res_music.json()
comments = js_2['comment']['commentlist']
for i in comments:
comment = i['rootcommentcontent'] + '\n——————————————————————————————————\n'
f2.writelines(comment)
# print(comment)
f2.close()
print('下载成功!\n')
def wordcloud(self):
self.name = input('请输入要生成词云图的文件名称:')
def cut(text):
wordlist_jieba=jieba.cut(text)
space_wordlist=" ".join(wordlist_jieba)
return space_wordlist
with open(self.name+".txt" ,encoding="utf-8")as file:
text=file.read()
text=cut(text)
mask_pic=numpy.array(Image.open("心.png"))
wordcloud = WordCloud(font_path="C:/Windows/Fonts/simfang.ttf",
collocations=False,
max_words= 100,
min_font_size=10,
max_font_size=500,
mask=mask_pic).generate(text)
wordcloud.to_file(self.name+'云词图.png') # 把词云保存下来
print('生成成功!\n')
5.最后类的实例化
qq = QQ()
qq.menu()
6.效果展示
image
image
image
image
image
image
image
image
image
image
- 打包成.exe
用pyinstaller -F打包,运行会报错、闪退。
image
看上图报错信息应该和词云图有关,注释掉词云图所需的库,def wordcloud()按下图修改可正常打包,但是就没有生成词云图的功能了:
image
image
image
下载歌词或评论时,如有重名的歌曲,可在歌曲前面加上歌手姓名,如上图的“邓紫棋泡沫”。
【四、总结】
1.项目四对前三个项目进行了复习,在巩固了爬虫知识点的同时又复习了类的相关用法;
2.前三个项目可自行戳;文章进行学习:手把手教你使用Python抓取QQ音乐数据(第一弹)、手把手教你使用Python抓取QQ音乐数据(第二弹)、手把手教你使用Python抓取QQ音乐数据(第三弹)。
3.感谢观看,写百行以上的代码是不是轻轻松松呢。祝小伙伴们学业有成,工作顺利!
4.如果需要本文源码的话,请在公众号后台回复“QQ音乐”四个字进行获取,觉得不错,记得给个star噢。
****看完本文有收获?请转发分享给更多的人****
相关推荐
- 高仿ios主题全套软件(超高仿ios安卓主题)
-
IPhone12启动器全套仿Ios12桌面主题是一款能够让大家的安卓手机秒变苹果机的系统工具,IPhone12启动器可让你的手机直接变成IPhone12的桌面。从主题,桌面,Ui以及系统内的各种细节,...
- win10在哪里下载软件最好(win10软件在哪下载比较好)
-
1、点击Win10系统的开始菜单,然后在点击应用商店;2、打开Win10应用商店后,在搜索框里输入想要搜索的应用软件,然后点击检索;3、点击搜索到的应用,点击安装;4、点击安装后,系统会提示要切换到这...
- 电脑软件怎么安装(电脑软件怎么安装到手机上)
-
电脑怎么安装excel软件方法/步骤:1.在电脑左下角找到这个小圆圈,单击小圆圈打开搜索栏。搜索MicrosoftStore。2.在右上角找到搜索,单击搜索。在搜索中输入Excel。回车键打开。3....
- u盘win7系统安装盘(u盘里安装win7系统)
-
有些软件我们从网上下载安装时需要破解密码或者我们没有网时,直接需要把安装的软件,传到别的电脑,具体操作如下:1。直接把另一台电脑桌面上的软件复制或发送的优盘里,其实那只是一个快捷方式2.以ps软件为例...
- 语音输入法哪个好用(语音输入法免费版下载安装)
-
日常基本使用的讯飞和搜狗都还不错,对比来看的话,讯飞相对会更好一些。讯飞输入法在键盘输入方面进步非常快,功能也比较全面。单纯的语音方面,讯飞的稍微好一点,例如一些标点、断句之类处理的更加到位。讯飞支持...
- 手机app应用市场(手机里面的应用市场)
-
360手机助手是android智能手机的手机管理专家。提供海量的游戏、软件、音乐、小说、视频、图片,通过它轻松下载、安装、管理手机资源。所有提供信息资源,全部经过360安全检测中心的审核认证,绿色无毒...
-
- 开局最强系统(开局最强系统txt奇书网)
-
《最强奶爸系统》作者:最美猪猪小说简介同学甲:“我找到了月入七千的工作。”同学乙:“我找到了月入一万的工作。叶辰,你呢?”叶辰:“我老婆…是万亿市值超凡集团的老板,给我生了10个孩子。”同学们:???叶辰遭前女友陷害,阴差阳错邂逅了一位美女...
-
2026-01-03 07:03 off999
- win10系统下载器官网(下载windows10官方)
-
如果您想要在Windows10上下载游戏辅助,可以按照以下步骤进行:1.打开您选择的游戏辅助下载网站,例如:GameCopyWorld或MegaGames。这些网站提供许多破解游戏的补丁和辅助工具...
- photoshop官方网站进入(photoshop官网入口)
-
那是因为网站采用了安全加密技术,安装了SSL证书,说明此网站为安全的页面,其信息已经经过加密措施。显示https的网站,网址上还会有显示一个小锁头,也是安全标志。1.先用Photoshop做一个网页图...
- windows7旗舰版主机多少钱(windows7旗舰版电脑多少钱一台)
-
其实这两个版本没有太大的差别,只是功能上有少量差别,旗舰版服务开启的要比专业版本服务开启的多几个,至于朋友们说的专业快速度比旗舰版快,或旗舰版比专业版速度快,个人认为速度都是一样只是功能上的差别,如果...
- 小米平板(小米平板怎么分屏)
-
小米平板的简单使用方法:1、首先给小米平板给充电,确保电量充足。2、长按住电源键启动小米平板,进入设备初始设置界面。3、根据屏幕上的提示信息,设置平板电脑联网、绑定小米账号等,直到完成即可正常使用了。...
- 移动硬盘一直在加载无法读取
-
移动硬盘电源灯亮说明硬盘有供电,无法识别此移动硬盘时,可按如下步骤进行排查:1)将移动硬盘拔下后,更换硬盘盒再接上确认。2)更换过硬盘盒还是无法识别的话,移动硬盘就损坏了,需要进行更换;3)若更换过硬...
- 下载软件的app大全(下载软件的app大全免费)
-
中国最常见的目前是迅雷下载软件。官网可以下载到正常的免费版本。他支持ftphttpbt磁力链接等多种形式的下载。国外的有bitcome。电驴和电骡等多种形式的下载软件。他们都可以满足日常的下载要求,...
- wifi贴小程序搭建需要多少钱
-
回答如下:要搭建自己的WiFi小程序,需要以下步骤:1.获得开发资格:首先需要注册成为开发者,获得小程序的开发资格。2.编写代码:使用微信小程序的开发工具,编写WiFi小程序的前端和后端代码。3....
- 外网服务器地址(外网服务器地址ip大全)
-
要弄懂这个问题,你首先要了解什么叫内网,什么叫外网,什么叫服务器,服务器在网络中所扮演的是什么角色,内网:就是指内部网络,窄义上的内网就是指中小型的局域网外网:就是指在你办公网络之外能访问到的网络...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
