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

简介:

【一、项目目标】

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

通过手把手教你使用Python抓取QQ音乐数据(第二弹)我们实现了获取 QQ 音乐指定歌曲的歌词和指定歌曲首页热评。

此次我们在项目(二)的基础上获取更多评论并生成词云图,形成手把手教你使用Python抓取QQ音乐数据(第三弹)。

【二、需要的库】

主要涉及的库有:requests、json、wordcloud、jieba

如需更换词云图背景图片还需要numpy库和PIL库(pipinstall pillow)

【三、项目实现】

1、首先回顾一下,下面是项目(二)获取指定歌曲首页热评的代码;

def get_comment(i):

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_2 = res_music.json()
comments = js_2['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()
2、下面来考虑如何获取后面的评论,下图是项目(二)评论页面的parms参数;

image
3、网页无法选择评论的页码,想看后面的评论智能一次一次的点击“点击加载更多”;我们可以点击一下看看parms有什么变化。

image
4、这里有个小技巧,先点击下图所示clear按钮,把network界面清空,再点击“点击加载更多”,就能直接找到第二页的数据。

image
image
5、点击加载更多后出现下图。

image
image
6、发现不止pagenum变了,cmd和pagesize也变了,到底那个参数的问题呢,那我们再看下第三页;

image
7、只有pagenum变了,那我们尝试一下把pagenum改成“0”,其他不变,能正常显示第一页数据吗?

image
第一页第一条评论

image
第一页最后一条评论

image
8、能正常显示,那就确定思路了:用第二页的parms,写一个for循环赋值给pagenum,参考项目(二)把评论抓取到txt。

9、代码实现:为了不给服务器造成太大压力,我们本次只爬取20页数据。

import requests,json

def get_id(i):

global id
url_1 = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
# 这是请求歌曲评论的url
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 = {'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']
return id
# print(id)

def get_comment(i):

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'}
f2 = open(i+'评论.txt','a',encoding='utf-8')    #存储到txt中
for n in range(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']['commentlist']
    
    for i in comments:
        comment = i['rootcommentcontent'] + '\n——————————————————————————————————\n'
        f2.writelines(comment)
    # print(comment)
f2.close()
input('下载成功,按回车键退出!')

def main(i):

get_id(i)
get_comment(i)

main(i = input('请输入需要查询歌词的歌曲名称:'))
10、词云图代码

from wordcloud import WordCloud
import jieba
import numpy
import PIL.Image as Image #以上两个库是为了更换词云图背景图片

def cut(text):

wordlist_jieba=jieba.cut(text)
space_wordlist=" ".join(wordlist_jieba)
return space_wordlist

with open("句号评论.txt" ,encoding="utf-8")as file:

text=file.read()
text=cut(text)
mask_pic=numpy.array(Image.open("心.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('云词图.png')  # 把词云保存下来

11、成果展示

image
image
【四、总结】

1、项目三比项目二多的功能:一是通过寻找parms参数里每一页评论页码之间的关系,爬取更多的评论;二是学会生成词云图;(注意读取文件的路径)

2、WordCloud更多参数详见下图,可以研究出更多的玩法;

image
3、不只.txt可以作为词云图的数据源,csv、Excel也可以:

import xlrd

引入excel读取模块

datafile_path = '你的Excel文件.xlsx'
data = xlrd.open_workbook(datafile_path)

文件名以及路径

table = data.sheet_by_name('sheet')

通过名称获取Sheet1表格

nrows = table.nrows

获取该Sheet1中的有效行数

list = []
for i in range(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音乐”四个字进行获取。

相关文章
|
5月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
3310 1
|
5月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
615 0
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
6月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
6月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
6月前
|
数据采集 数据可视化 关系型数据库
基于python大数据的电影数据可视化分析系统
电影分析与可视化平台顺应电影产业数字化趋势,整合大数据处理、人工智能与Web技术,实现电影数据的采集、分析与可视化展示。平台支持票房、评分、观众行为等多维度分析,助力行业洞察与决策,同时提供互动界面,增强观众对电影文化的理解。技术上依托Python、MySQL、Flask、HTML等构建,融合数据采集与AI分析,提升电影行业的数据应用能力。
|
计算机视觉 Python
来,我教你用Python做个音乐海报
用Python做个音乐海报
419 0
|
6月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
881 102

推荐镜像

更多