用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 re模块介绍
Nov 30 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
RC4文件加密的python实现方法
Jun 30 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
Python requests库用法实例详解
Aug 14 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
jupyter notebook实现显示行号
Apr 13 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
使用django自带的user做外键的方法
Nov 30 Python
安装pytorch时报sslerror错误的解决方案
May 17 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
用Python中的字典来处理索引统计的方法
2015/05/05 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
银行职员个人的工作自我评价
2014/02/15 职场文书
店面销售职位的职责
2014/03/09 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript