当前位置: 首页 > 后端技术 > Python

教你用Python抓取QQ音乐数据(三)

时间:2023-03-26 19:25:42 Python

【1.项目目标】通过一步步教你用Python抓取QQ音乐数据(上)我们实现了QQ音乐指定歌手单曲的获取排名靠前的歌曲的歌名、专辑名、播放链接指定页数。通过教大家使用Python抓取QQ音乐数据(下),我们实现了获取QQ音乐指定歌曲的歌词和指定歌曲首页的热评。本次在项目(2)的基础上,获取更多评论并生成词云图,形成一步一步的教程,教大家如何使用Python抓取QQ音乐数据(第三轮)。[2。需要的库】主要涉及到的库有:requests、json、wordcloud、jieba。如果需要更换词云图的背景图,还需要numpy库和PIL库(pipinstallpillow)【3.项目实施】1.首先审核,以下是项目(2)获取指定歌曲首页热评的代码;*******************defget_comment(i):url_3='https://c.y.qq.com/base/fcgi-...'headers={'user-agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36',/#tag请求发送自什么设备和浏览器}params={'g_tk_new_20200303':'5381','g_tk':'5381','loginUin':'0','hostUin':'0','格式':'json','inCharset':'utf8','outCharset':'GB2312','notice':'0','platform':'yqq.json','needNewCode':'0','cid':'205360772','reqtype':'2','biztype':'1','topid':id,'cmd':'8','needmusiccrit':'0','pagenum':'0','pagesize':'25','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'hot_comment'f2=open(i+'comment.txt','a',encoding='utf-8')/#存储到txtforiincomments:comment=i['rootcommentcontent']+'n————————————————————————————————————————————————————————————————————————————————————————n'f2.writelines(comment)/#print(comment)f2.close()2、我们考虑一下如何得到下面的注释。下图是项目(2)评论页的parms参数;3.网页无法选择评论页码。阅读下面的评论并一次单击“单击以加载更多”;大家可以点击查看parms有什么变化![]()4。这里有个小技巧,先点击下图清除按钮设置网络清除界面,然后点击“点击加载更多”,可以直接在第二页找到数据。![]()5。点击加载更多,会出现下图。![]()6。发现不仅pagenum变了,cmd和pagesize也变了。参数问题呢,再看第三页;7、只有pagenum变了,我们试试把pagenum改成“0”,其他不变,第一页的数据能正常显示吗?第一页的第一条评论和第一页的最后一条评论。![]()8。如果能正常显示,那么确定思路:利用第二页的parms,写一个for循环给pagenum赋值,参考第(2)项抓取评论到txt。9、代码实现:为了不给服务器造成太大的压力,我们这次只爬取了20页数据。*************importrequests,jsondefget_id(i):globalidurl_1='https://c.y.qq.com/soso/fcgi-...'/#这是请求歌曲评论的urlheaders={'user-agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/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':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()id=json_music'data''list'['id']returnid/#print(id)******************defget_comment(i):url_3='https://c.y.qq.com/base/fcgi-...'headers={'user-agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,比如Gecko)Chrome/63.0.3239.132Safari/537.36'}f2=open(i+'comments.txt','a',encoding='utf-8')/#storeintxtforninrange(20):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':'247347346','cmd':'6','needmusiccrit':'0','pagenum':n,'pagesize':'15','lasthotcommentid':'song_247347346_3297354203_1576305589','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'foriincomments:comment=i['rootcommentcontent']+'n——————————————————————————————————n'f2.writelines(comment)/#print(comment)f2.close()input('下载成功,回车退出!')****defmain(i):get_id(i)get_comment(i)main(i=input('请输入歌曲名称whose歌词需要查询:'))10.词云图代码***********************来自wordcloudimportWordCloudimportjiebaimportnumpyimportPIL.ImageasImage/#以上两个库是替换词云图的背景图defcut(text):wordlist_jieba=jieba.cut(text)space_wordlist="".join(wordlist_jieba)returnspace_wordlistwithopen("Periodcomments.txt",encoding="utf-8")asfile:text=file.read()text=cut(text)mask_pic=numpy.array(Image.open("heart.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)image=wordcloud.to_image()/#image.show()wordcloud.to_file('CloudWordMap.png')/#保存词云11.结果展示![]()[4.总结】1、第3项比第2项功能多:一是通过在parms参数中查找每页评论的页码关系,爬取更多的评论;另一种是学习生成词云图;(注意读取文件的路径)2、WordCloud更多参数见下图。更多玩法可以研究;不仅可以使用.txt作为词云图的数据源,还可以使用csv和Excel:*******************importxlrd/#Introduceexcel读取取模块datafile_path='yourExcelfile.xlsx'data=xlrd.open_workbook(datafile_path)/#filenameandpathtable=data.sheet_by_name('sheet')/#/#GetSheet1bynamenrows=table.nrows/#获取Sheet1列表中的有效行数=[]foriinrange(nrows):value=str(table.row_values(i)[1])/#print(value)list.append(value)/#print(pingjia_list)text=str(list).replace("'",'').replace(',','').rstrip(']').lstrip('[')/#print(text)4、爬取QQ音乐项目到此结束。如果有需要,可以通过Scrapy框架爬取更多的歌曲信息、歌词、评论,但是作为练习项目,重要的不是爬取多少数据,而是如何爬取指定的数据。5、小编将前三个项目打包在一起,通过菜单控件爬取不同的数据,敬请期待。6、如需本文源码,请在公众号后台回复“QQ音乐”获取。看完这篇文章你有收获吗?请转发分享给更多的人加入IT分享之家群,请在微信后台回复【进群】如果想深入了解Python网络爬虫和数据挖掘,可以上专业网站:http://pdcfighting.com/