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

【一、项目目标】

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

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

【二、需要的库】

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

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

【三、项目实现】

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

import requests,html,json

url_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('下载成功,按回车键退出!')

代码实现:获取评论。

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',

/# 标记了请求从什么设备,什么浏览器上发出

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxzgw.html