【一、项目目标】
通过《教你使用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('请输入需要查询的