用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标准库urllib2的一些使用细节总结
Mar 16 Python
举例讲解Python中is和id的用法
Apr 03 Python
python中正则的使用指南
Dec 04 Python
Python分析学校四六级过关情况
Nov 22 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
python生成特定分布数的实例
Dec 05 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
pandas中DataFrame重置索引的几种方法
May 24 Python
Python3.10的一些新特性原理分析
Sep 15 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
附件名前加网站名
2008/03/23 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
Python解析最简单的验证码
2016/01/07 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
利用python实现数据分析
2017/01/11 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
python 简单的调用有道翻译
2020/11/25 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
农民入党思想汇报
2014/01/03 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
党员个人自我评价
2015/03/03 职场文书
公司表扬信格式
2015/05/04 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis