社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python进阶者 • 4 年前 • 321 次点击  
阅读 1

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

【一、项目目标】

通过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中for i in comments:    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音乐”四个字进行获取。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62255
 
321 次点击