手把手教你使用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,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',
/# 标记了请求从什么设备,什么浏览器上发出
}
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('下载成功,按回车键退出!')
- 封装函数
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音乐”四个字进行获取。
看完本文有收获?请转发分享给更多的人
IT共享之家
入群请在微信后台回复【入群】

想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/
手把手教你使用Python抓取QQ音乐数据(第二弹)的更多相关文章
- 手把手教你使用Python抓取QQ音乐数据(第一弹)
[一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...
- 手把手教你用Python抓取AWS的日志(CloudTrail)数据
数据时代,利用数据做决策是大数据的核心价值. 本文手把手,教你使用python进行AWS的CloudTrail配置,进行日志抓取.进行数据分析,发现数据价值! 如今是云的时代,许多公司都把自己的IT架 ...
- 手把手教你使用Python爬取西刺代理数据(下篇)
/1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...
- 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)
本篇文章是使用python抓取数据的第一篇,使用requests+BeautifulSoup的方法对页面进行抓取和数据提取.通过使用requests库对链家网二手房列表页进行抓取,通过Beautifu ...
- Python抓取百度百科数据
前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...
- 使用浏览器抓取QQ音乐接口(排行榜篇)
前言 最近手头比较空闲,再加上看到其他人的博客都差不多有个类似的播放控件,手就会闲不下来,说干就干,所以我们开始吧! 来到QQ音乐的官网,我们就直奔着目标去,寻找排行榜 我们主要用的是最近比较热的歌, ...
- 使用浏览器抓取QQ音乐接口(歌曲篇)
前言 前面我们获取了歌曲的排行榜的数据,我们现在需要实现歌曲播放 前面我们写了一段函数来得到了回调的数据,现在我们需要使用这一段数据,来实现播放歌曲 完整代码 <!DOCTYPE html> ...
- 手把手教你用python抓网页数据
http://www.1point3acres.com/bbs/thread-83337-1-1.html
- python 抓取javascript 动态数据
1. 新安装一个python库 :~$ sudo pip install seleniumhq 2. 编写代码: 以获取百度百科点赞数为例 import selenium from selenium ...
随机推荐
- 深度学习玩LOL-游戏助手-概述
目标 用深度学习技术实现常规英雄联盟游戏助手的主要功能,功能主要包括:英雄推荐,装备推荐,地图预警等. 基本思路 首先使用图像分类算法模型对游戏客户端内的英雄头像进行截取和识别. 使用线性回归模型对可 ...
- ERROR: ...hbase.PleaseHoldException: Master is initializing
同学升级HBase后遇到这个问题,hbase shell,status就可以看到 ERROR: -hbase.PleaseHoldException: Master is initializing 解 ...
- (Java实现) 洛谷 P1028 数的计算
题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数nn): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能 ...
- Java实现 洛谷 P1089 津津的储蓄计划
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scan ...
- 09_EM算法
今天是2020年3月5日星期四.预计开学时间不会早于四月初,真是好消息,可以有大把的时间整理知识点(实际上发文章的时间都6月6号了,希望9月份能开学啊,不耽误找工作~).每次导师找,整个人会变的特别烦 ...
- TCP协议“三次握手”与“四次挥手”详解(上)
在使用TCP协议进行数据的传输之前,客户端与服务器端需要建立TCP Connection,即建立连接,之后两端才能进行数据的传输. 下面堆TCP连接“三次握手”的过程进行说明. 1.相关概念 首先,我 ...
- jstl中<c:if>标签属性用法
今天用jstl+el从session域中获取属性,遇到了问题 org.apache.jasper.JasperException: <h3>Validation error message ...
- Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
原作:Jake Edge 译者:豌豆花下猫@Python猫 英文:https://lwn.net/Articles/819853/ 随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 ...
- @Component、@Service、@Controller、@Rrepository说明
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1 Spring容 ...
- Springboot拦截器实现IP黑名单
Springboot拦截器实现IP黑名单 一·业务场景和需要实现的功能 以redis作为IP存储地址实现. 业务场景:针对秒杀活动或者常规电商业务场景等,防止恶意脚本不停的刷接口. 实现功能:写一个拦 ...