手把手教你使用Python抓取QQ音乐数据(第二弹)

浏览: 1067

【一、项目目标】

通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

    此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精彩评论。

【二、需要的库】

    主要涉及的库有:requests、json、html

【三、项目实现】

    1.以歌曲“泡沫”为例,查看该界面的XHR

    2.通过对XHR的Size进行排序,逐个查看(参考英文含义),我们看到第一个红框内是歌曲评论,第二个框内是歌词!

3.分别查看这两条数据Headers里面Parms参数。

4.发现这几个参数可能会代表不同的歌曲,那到底是哪个呢,我们在代开另一首歌对比一下。

5.发现只有这个topid不同,其他都一样,这就代表topid代表不同歌曲的id,同理我们看一下歌词。

    6、确定下来:musicid= topid = 歌曲的id,接下来我们的任务是找到这个id。

    7.返回以下界面,也就是我们上一个项目的主战场。

    参考上一个项目,很容易找到“id”的值就是我们要寻找的id。

    所以思路确定下来:先通过input()输入歌名生成url_1找到该歌曲的“id”参数,再生成url_2获取歌词和评论。

    8.代码实现:获取歌曲id,如下所示:

import requests,html,jsonurl_1 ='https://c.y.qq.com/soso/fcgi-bin/client_search_cp'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',# 标记了请求从什么设备,什么浏览器上发出    }i = input('请输入需要查询歌词的歌曲名称:')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']['song']['list'][0]['id']print(id)

9.代码实现:获取歌词

    实现方法如下:

url_2 ='https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.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',# 标记了请求从什么设备,什么浏览器上发出    }params= {'nobase64':'1','musicid':id,#用上面获取到的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 = res_music.json()lyric = js['lyric']lyric_html = html.unescape(lyric)#用了转义字符html.unescape方法# print(lyric_html)f1 = open(i+'歌词.txt','a',encoding='utf-8')f1.writelines(lyric_html)f1.close()#存储到txt中input('下载成功,按回车键退出!')

10. 代码实现:获取评论。

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',# 标记了请求从什么设备,什么浏览器上发出    }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': 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 = res_music.json()comments = js['hot_comment']['commentlist']f2 = open(i+'评论.txt','a',encoding='utf-8')#存储到txt中foriincomments:comment = i['rootcommentcontent'] +'\n——————————————————————————————————\n'    f2.writelines(comment)# print(comment)f2.close()input('下载成功,按回车键退出!')

    10. 封装函数

    11.结果展示

【四、总结】

    1.项目二比项目一稍复杂一点,多了一步获取歌曲id的步骤;

2.通过XHR爬取数据一般要使用json,格式为:

res =requests.get(url)json =res.json()list = json[‘’][‘’]…

    3.学习了转义字符html.unescape方法;

    4.保存到txt还可以用 with open() as的方法;

    5.Python爬取QQ音乐数据(第三弹)将为大家带来如何爬取更多评论,并生成词云图(wordcloud)。

6.需要本文源码的话,请在公众号后台回复“QQ音乐”四个字进行获取。

推荐 0
本文由 dcpeng 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册