用Python爬取QQ音乐评论并制成词云图的实例


Posted in Python onAugust 24, 2019

环境:Ubuntu16.4 python版本:3.6.4 库:wordcloud

这次我们要讲的是爬取QQ音乐的评论并制成云词图,我们这里拿周杰伦的等你下课来举例。

第一步:获取评论

我们先打开QQ音乐,搜索周杰伦的《等你下课》,直接拉到底部,发现有5000多页的评论。

用Python爬取QQ音乐评论并制成词云图的实例

这时候我们要研究的就是怎样获取每页的评论,这时候我们可以先按下F12,选择NetWork,我们可以先点击小红点清空数据,然后再点击一次,开始监控,然后点击下一页,看每次获取评论的时候访问获取的是哪几条数据。最后我们就能看到下图的样子,我们发现,第一条数据就是我们所要找的内容,点击第一条数据,打开它的response拉到最下面,发现他的最后一条评论rootcommentcontent跟我们网页中最后一条评论是一致的,那这时候已经成功了一般了,我们接下来只需要研究这条数据获取的规律就可以获取到所有的评论了。

用Python爬取QQ音乐评论并制成词云图的实例

我们先查看这条数据的Headers分析下Request URL,通过点开不同的页码进行比较,发现每次发出的情况网址大部分内容是相同,不同的地方有两个,就是pagenum跟JsonCallBack,pagenum从英文上很明显能看出来就是页码,JsonCallBack又是啥呢?

https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=2058499274&jsonpCallback=jsoncallback7494258674829413&loginUin=2230661779&hostUin=0&format=jsonp&inCharset=utf8&outCharset=GB2312¬ice=0&platform=yqq&needNewCode=0&cid=205360772&reqtype=2&biztype=1&topid=212877900&cmd=8&needmusiccrit=0&pagenum=4&pagesize=25&lasthotcommentid=song_212877900_23831021_1526748144&callback=jsoncallback7494258674829413&domain=qq.com&ct=24&cv=101010

用Python爬取QQ音乐评论并制成词云图的实例

我们不妨将网址直接放在地址栏打开看看是怎样。我们可以发现是直接返回一个不正规的json格式,为什么说是不正规呢?因为他在开头多了个

jsoncallback7494258674829413

这个就是我们上面那个不知道怎么来的参数,我们尝试在把这个数据改一下后再打开网址,结果发现,获取的json内容是没有变化,唯一变的是开头jsoncallback1111111111

变成了我们输入的那个数值,所以我们可以猜测这是一个随机数,无论你输入什么,都不会影响我们要获取的内容。那这样就好办多了。

用Python爬取QQ音乐评论并制成词云图的实例

用Python爬取QQ音乐评论并制成词云图的实例

我们就直接放代码获取:

import requests
import json
def get_comment():
  for i in range(1,7000):
    # 打印页码
    print(i)
    # headers头部
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0',
 'Referer': "https://y.qq.com/n/yqq/song/0031TAKo0095np.html"}
    # 请求的url
    url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=2058499274&jsonpCallback=jsoncallback06927647062927766&loginUin=2230661779&hostUin=0&format=jsonp&inCharset=utf8&outCharset=GB2312¬ice=0&platform=yqq&needNewCode=0&cid=205360772&reqtype=2&biztype=1&topid=212877900&cmd=8&needmusiccrit=0&pagenum=%s&pagesize=25&lasthotcommentid=song_212877900_3035803620_1526783365&callback=jsoncallback06927647062927766&domain=qq.com&ct=24&cv=101010' %i
    # 打印当前访问的url地址
    print (url)
    # 将请求得到的页面赋值为req
    req = requests.get(url,headers=headers,verify=False)
    # 对获取到的内容进行utf-8编码
    html = str(req.content,'UTF-8')
    # 对非正规的json进行处理,去掉头部跟尾部多余的部分
    html= html.strip("jsoncallback06927647062927766(")
    html = html.replace(")","")
    # 去掉两边的空格
    html = html.strip()
    # 将处理后的json转为python的json
    data = json.loads(html)
    # 获取json中评论的部分
    list = data['comment']['commentlist']
    # 每次都重新定义一个列表来存储每一页的评论
    content = []
    # 遍历当前页的评论并通过调用write()函数来保存
    for i in list:
      # 偶尔也会有一页的评论获取不到,这时候如果报错了可以直接忽略那一页,继续运行
      try:
        content.append(i['rootcommentcontent'].replace("[em]","").replace("[/em]","").replace("e400",""))
      except KeyError:
        content = []
        break
    write(content)
# 将当前页面的评论传递过来
def write(content):
  # 打开一个文件,将列表的内容一行一行的存储下来
  with open('comments.txt', 'a', encoding = 'UTF-8') as f:
    for i in range(len(content)):
      # 因为转为json后\n不胡自动换行,所以我们这里将\n给手换行
      string = content[i].split("\\n")
      for i in string:
        # 因为出现了很多评论被删除的情况,所有我们把这句给过滤掉
        i = i.replace("该评论已经被删除", "")
        # 打印每条评论
        print (i)
        # 将评论写入文本
        f.writelines(i)
        # 给评论换行
        f.write("\n")
if __name__ == "__main__":
  get_comment()

写入文档的内容大概就是这样:

用Python爬取QQ音乐评论并制成词云图的实例

获取完之后我们就能用wordcloud来进行词云图的制作了:

# -*- coding: utf-8 -*-
import jieba
from wordcloud import WordCloud, STOPWORDS
from os import path
from scipy.misc import imread
# 读取mask/color图片
d = path.dirname(__file__)
color_mask = imread("cyx.png")
#将爬到的评论放在string中
with open('nbzd.txt', 'r', encoding = 'UTF-8') as f:
  string = f.read()
  word = " ".join(jieba.cut(string))
  wordcloud = WordCloud(background_color='white',
             mask=color_mask,
             max_words=100,
             stopwords=STOPWORDS,
             font_path='/home/azhao/桌面/素材/simsun.ttc',
             max_font_size=100,
             random_state=30,
             margin=2).generate_from_text(word)
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

最后展示的结果是这样的:

用Python爬取QQ音乐评论并制成词云图的实例

以上这篇用Python爬取QQ音乐评论并制成词云图的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解在Python程序中自定义异常的方法
Oct 16 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
Python实现的简单排列组合算法示例
Jul 04 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
python switch 实现多分支选择功能
Dec 21 Python
python解释器spython使用及原理解析
Aug 24 #Python
python爬虫之爬取百度音乐的实现方法
Aug 24 #Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 #Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 #Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 #Python
简单分析python的类变量、实例变量
Aug 23 #Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 #Python
You might like
php getsiteurl()函数
2009/09/05 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
对Python3 序列解包详解
2019/02/16 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
wxpython绘制圆角窗体
2019/11/18 Python
python ubplot使用方法解析
2020/01/10 Python
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
数据库面试要点基本概念
2013/10/31 面试题
领导个人查摆剖析材料
2014/10/29 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
产品质量保证书范本
2015/02/27 职场文书
2015年售票员工作总结
2015/04/29 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
mysql数据库实现设置字段长度
2022/06/10 MySQL