爬取qq音乐的评论并生成词云

我们选取的是歌曲的周杰伦的 听妈妈的话
先看效果图

首先,我们进去qq音乐找到这首歌 网易云出来挨打
https://y.qq.com/n/yqq/song/002hXDfk0LX9KO.html

点击评论或者下拉就可以看到评论了。
按F12进入调页面,选择network,然后点击评论的下一页观察页面请求,出现一些图片,还有一个fcg开头的,观察响应界面


哦豁,我们神奇的发现评论数据藏在comment 对象下的commentlist 数组中,是json数据。
看一下Headers;

直接复制请求url,粘贴到地址栏,很幸运的是可以直接打开,可以直接打开就省事很多了:

观察不同页的评论的请求url



看来看去都没什么变化,变化的有两个:

  • “pagenum” ,页数
  • “lasthotcommentid” ,上一条热门评论的id

接下来划重点了,不要走神:


右键那个comment请求,复制,复制cURL。
得到这么一串:

curl 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?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=102066257&cmd=8&needmusiccrit=0&pagenum=1&pagesize=25&lasthotcommentid=song_102066257_18578995_1591191607&domain=qq.com&ct=24&cv=10101010' \-H 'authority: c.y.qq.com' \-H 'sec-ch-ua: "\\Not\"A;Brand";v="99", "Chromium";v="84", "Microsoft Edge";v="84"' \-H 'accept: application/json, text/javascript, */*; q=0.01' \-H 'sec-ch-ua-mobile: ?0' \-H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.30 Safari/537.36 Edg/84.0.522.11' \-H 'origin: https://y.qq.com' \-H 'sec-fetch-site: same-site' \-H 'sec-fetch-mode: cors' \-H 'sec-fetch-dest: empty' \-H 'referer: https://y.qq.com/n/yqq/song/002hXDfk0LX9KO.html' \-H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \-H 'cookie: pgv_pvid=2783427480; ts_uid=1847083617; pgv_pvi=8854632448; userAction=1; yqq_stat=0; pgv_info=ssid=s2338435723; pgv_si=s7558193152; ts_last=y.qq.com/n/yqq/song/002hXDfk0LX9KO.html' \--compressed

生成请求代码:

import requests
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'querystring = {"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": "102066257", "cmd": "8", "needmusiccrit": "0","pagenum": "1", "pagesize": "25", "lasthotcommentid": "song_102066257_18578995_1591191607", "domain": "qq.com","ct": "24", "cv": "10101010"
}headers = {'accept': 'application/json, text/javascript, */*; q=0.01','referer': 'https://y.qq.com/n/yqq/song/002hXDfk0LX9KO.html','origin': 'https://y.qq.com','user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.30 Safari/537.36 Edg/84.0.522.11','authority': 'c.y.qq.com'}response = requests.request('GET', url, headers = headers, params = querystring)
#获取 comment 对象下的commentlist 数组
#print(response.text)

把评论存放到文件中,去重复行,去除非文字的表情

import re
import json
file_path = './comment.txt'
files = open(file_path,'a',encoding = 'utf8') #打开一个文件用于追加
comment_json = json.loads(response.text)
comment_list = comment_json['comment']['commentlist']
last_comment = comment_list[24]
last_comment_id = last_comment['commentid']
#遍历每一页
try:for i in range(500):    #页数随意点    querystring['pagenum'] = str(i)querystring['lasthotcommentid'] = last_comment_idresponse = requests.request('GET',url, headers=headers,params=querystring)comment_json = json.loads(response.text)comment_list = comment_json['comment']['commentlist']last_comment = comment_list[24]last_comment_id = last_comment['commentid']#写入文件。并删除表情for comment in comment_list:rootcommentcontent = comment['rootcommentcontent']compile = re.compile(r'\[em].*[/em].',re.S)rootcommentcontent = re.sub(compile,'',rootcommentcontent)files.write(rootcommentcontent+'\n')print('正在写入第',i,'页')except Exception as e:print("下标溢出")finally:#去除重复行with open(file_path,'r+',encoding='utf8') as rwf:new_content = list(set(rwf.readlines()))rwf.seek(0)rwf.writelines(new_content)rwf.truncate(rwf.tell())files.close()

生成词云:

你需要准备一个中文字体库,不然中文可能乱码,以及随意一张背景图

我这里准备是是小楷
以及随便找了一张图(记得随意点

from PIL import Image
import numpy as np
import jieba
from wordcloud import WordCloud,ImageColorGenerator
from matplotlib import pyplot as pltimg = './33.jpg'f = open(file_path,'r',encoding='utf8').read()background = np.array(Image.open(img))jieba_text = ' '.join(jieba.cut(f)) #注意是空格wordcloud = WordCloud(font_path = './font/xiaokai.ttf', #导入中文字体background_color = 'white', #背景颜色mask = background).generate(jieba_text)#jieba.add_word('这首歌') #添加自己的词库分词# 基于彩色图像生成相应彩色image_colors = ImageColorGenerator(background)wordcloud.to_file('听妈妈的话.png')plt.imshow(wordcloud.recolor(color_func = image_colors),interpolation='bilinear')plt.axis('off')plt.show()

完整代码:

import requests
import re
import json
from PIL import Image
import numpy as np
import jieba
from wordcloud import WordCloud,ImageColorGenerator
from matplotlib import pyplot as plturl = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'querystring = {"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": "102066257", "cmd": "8", "needmusiccrit": "0","pagenum": "1", "pagesize": "25", "lasthotcommentid": "song_102066257_18578995_1591191607", "domain": "qq.com","ct": "24", "cv": "10101010"
}headers = {'accept': 'application/json, text/javascript, */*; q=0.01','referer': 'https://y.qq.com/n/yqq/song/002hXDfk0LX9KO.html','origin': 'https://y.qq.com','user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.30 Safari/537.36 Edg/84.0.522.11','authority': 'c.y.qq.com'}response = requests.request('GET', url, headers = headers, params = querystring)
#获取 comment 对象下的commentlist 数组
#print(response.text)#存放到txt中
file_path = './comment.txt'files = open(file_path,'a',encoding = 'utf8') #打开一个文件用于追加def view(): img = './33.jpg'f = open(file_path,'r',encoding='utf8').read()background = np.array(Image.open(img))jieba_text = ' '.join(jieba.cut(f)) #注意是空格wordcloud = WordCloud(font_path = './font/xiaokai.ttf', #导入中文字体background_color = 'white', #背景颜色mask = background).generate(jieba_text)#jieba.add_word('这首歌') #添加自己的词库分词# 基于彩色图像生成相应彩色image_colors = ImageColorGenerator(background)wordcloud.to_file('听妈妈的话.png')plt.imshow(wordcloud.recolor(color_func = image_colors),interpolation='bilinear')plt.axis('off')plt.show()comment_json = json.loads(response.text)
comment_list = comment_json['comment']['commentlist']
last_comment = comment_list[24]
last_comment_id = last_comment['commentid']
#遍历每一页
try:for i in range(500):    #页数随意点        querystring['pagenum'] = str(i)querystring['lasthotcommentid'] = last_comment_idresponse = requests.request('GET',url, headers=headers,params=querystring)comment_json = json.loads(response.text)comment_list = comment_json['comment']['commentlist']last_comment = comment_list[24]last_comment_id = last_comment['commentid']#写入文件。并删除表情for comment in comment_list:rootcommentcontent = comment['rootcommentcontent']compile = re.compile(r'\[em].*[/em].',re.S)rootcommentcontent = re.sub(compile,'',rootcommentcontent)files.write(rootcommentcontent+'\n')print('正在写入第',i,'页')except Exception as e:print("下标溢出")finally:#去除重复行with open(file_path,'r+',encoding='utf8') as rwf:new_content = list(set(rwf.readlines()))rwf.seek(0)rwf.writelines(new_content)rwf.truncate(rwf.tell())files.close()view()   

最终我们会得到一个存放评论的txt文件以及词云图



其他歌曲也是类似的操作…

爬取qq音乐的评论并生成词云——以《听妈妈的话》为例相关推荐

  1. python爬取QQ空间好友说说并生成词云

    最近自己玩爬虫玩得很嗨.想到爬QQ空间主要是因为在看网课的时候有不少人刷弹幕要去爬前女友空间..咳咳,虽然我没有前女友,但是这不失为一个有趣的练手机会.(爬完之后发现不会留下访客记录!确实很适合爬前女 ...

  2. python爬取陌生人的qq空间_Python爬取QQ空间好友说说并生成词云(超详细)

    前言 先看效果图: 思路 1.确认访问的URL 2.模拟登录你的QQ号 3.判断好友空间是否加了权限,切换到说说的frame,爬取当前页面数据,下拉滚动条,翻页继续获取 爬取的内容写入本地TXT文件中 ...

  3. 网络爬虫爬取b站励志弹幕并生成词云(精心笔记总结)

    bilibili献给新一代的演讲<后浪> 前言 在进入本文之前,我很想给大家推荐b站这个视频,3080.2万播放,27.9万条弹幕.这个视频之火不是因为漂亮的小姐姐,也不是什么很傻,很逗人 ...

  4. 网络爬虫爬取b站励志弹幕并生成词云(精心笔记总结)!

    bilibili献给新一代的演讲<后浪> 此文转载文,著作权归作者所有,如有侵权联系小编删除! 前言 在进入本文之前,我很想给大家推荐b站这个视频,3080.2万播放,27.9万条弹幕.这 ...

  5. Python爬取网易云歌曲评论,做词云分析

    前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块 ...

  6. 1] python 爬取微信好友个性签名,生成词云

    在Anaconda下完成,参考https://blog.csdn.net/zhonglixianyun/article/details/78229782 结果图: 1. 需要的库 numpy, os, ...

  7. 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息

    本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习. 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过. 1.Selenium简单介绍 ...

  8. 练习---爬取QQ音乐某首歌的评论,并存入Excel表中---以《消愁》为例

    import requests from bs4 import BeautifulSoup import json import xlwt#存储成Excel表格的函数 def save_excel(c ...

  9. 爬虫入门——爬取QQ音乐某一歌手前五首歌曲信息及相关评论

    文章目录 前言 一.查看信息 二.代码实现 总结 前言 python课作业 请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌 ...

最新文章

  1. 判断二叉树中两个节点的最低共同父节点
  2. 计算机教资笔试答题,教资笔试5大题型的解答技巧,你get到了嘛?
  3. python knn-基于python实现KNN分类算法
  4. OpenMP入门教程(二)reduce sum
  5. 【风控体系】携程基于大数据分析的实时风控体系
  6. 最小二乘法与最大似然函数的区别
  7. PHP的工作原理和生命周期
  8. java-Integer的自动装箱与拆箱
  9. POJ2402 Palindrome Numbers 回文数
  10. Vite+Vue3页面空白、图标不显示问题解决
  11. php alpine 安装vim,nginx-php-fpm-alpine
  12. Spring Boot+Ext JS准前后端框架应用的会话(Session)处理
  13. matlab矩阵元素绝对值,如何解决矩阵内部元素绝对值化
  14. 和我一起学CSLA.NET----创建业务对象2
  15. 【BLE蓝牙学习开发笔记】安利一款简单好用且高性价比的BLE蓝牙抓包器
  16. ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
  17. 关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页
  18. 最重要的三种能力:思考力、行动力、表达力
  19. shell 中三种引号的用法及区别
  20. eclipse php集成包,php-eclipse集成配置(Ecli

热门文章

  1. python美元和人民币双向兑换程序_Python:程序练习题(二)
  2. [Leetcode] 643. 子数组最大平均数 I java
  3. 裁员潮下,你需要这 10 大神器
  4. .NET平台机器学习资源汇总,有你想要的么?(转)
  5. 二进制与十进制转换的简单公式
  6. booktest-17 自定义过滤器 模板标签没有除法和取余函数
  7. 验证(Verification) 确认(Validation)鉴定( Qualification) 的区别
  8. 【PTA-python】第7章-1 词频统计 (30 分)--sys.stdin.read()读入到特定字符截至,双重排序条件key=lambda item:(-item[1], item[0])
  9. 具有硬件依赖性的计算机语言,具有硬件依赖性的计算机语言,被称为低级语言。下列哪些是低级语言?...
  10. 云计算高级运维第一阶段项目实战:在局域网中使用 awl 伪装 MAC 地址进行多线程 SYN 洪水攻击