《说好不哭》评论爬取——词云可视化分析(附完整代码)

目录

一.爬虫介绍

1.1 我们为什么要使用爬虫呢?

二.爬虫项目讲解

1. 作者姓名

2. 发表时间 

3. 点赞数 

 4. 评论内容

三. 爬取实战 

3.1 导入基本第三方库

3.2  进行爬取 

 四. 可视化——词云

4.1 wordcloud 简介 

4.2 更加详细的词云讲解,可查看:词云讲解 该链接

4.3 导入可视化第三方库

4.4 将.xls文件中评论输出到.txt文件当中

4.5 绘制词云,利用jieba提取词组与短语分析频次 

五. 完整代码


一.爬虫介绍

网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。 

1.1 我们为什么要使用爬虫呢?

我们生活在一个大数据时代,对于自己想了解的东西可以就行查阅相关资料可得,那么最简单的途径就是询问“度娘”,而我们将面临着,搜索出的结果数量庞大,不知如何统计,什么信息才是有用的,什么信息可以影响我们的决策,那么这个时候,就可以引进爬虫,来帮助我们辅助我们进行分析,这就是使用爬虫的根本目的

具体讲解可点击该链接来学习:爬虫知识点讲解 

二.爬虫项目讲解

今天,我们将爬取《说好不哭》的评论信息 。首先我们看一下开发者界面(F12进入):

找到 发表评论的作者姓名——发表时间——点赞数——评论内容

1. 作者姓名

2. 发表时间 

3. 点赞数 

 4. 评论内容

三. 爬取实战 

3.1 导入基本第三方库

import requests
import xlwt
import json
import xlrd

3.2  进行爬取 

workbook=xlwt.Workbook(encoding='utf-8')
worksheet=workbook.add_sheet('说好不哭评论')
worksheet.write(0,0,'昵称')
worksheet.write(0,1,'时间')
worksheet.write(0,2,'点赞数')
worksheet.write(0,3,'评论')
n=1
for page in range(0,20):
    print('-'*100)
    url_left= 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=792727314&hostUin=0&format=json&inCharset=utf8&outCharset=GB2312&notice=0&platform=yqq.json&needNewCode=0&cid=205360772&reqtype=2&biztype=1&topid=237773700&cmd=8&needmusiccrit=0'
    url=url_left+'&pagenum='+str(page)+'&pagesize=25'
    headers={'User-agent':''}
    r=requests.get(url,headers=headers)
    data=json.loads(r.text)
    common_comments=data.get('comment').get('commentlist')
    for i in range(0,len(common_comments)):
        worksheet.write(n,0,common_comments[i].get('nick'))
        worksheet.write(n,1,common_comments[i].get('time'))
        worksheet.write(n,2,common_comments[i].get('praisenum'))
        worksheet.write(n,3,common_comments[i].get('rootcommentcontent'))
        n+=1
    print('第{}页评论爬取完成'.format(str(page)))
    print('-'*100)
workbook.save('说好不哭.xls')

 我此时将爬取好的文件放入“说好不哭.xls”中,大家可以随意更改文件名称,都是可以的。

 爬取过程终端展示:

 说好不哭.xls:

 四. 可视化——词云

4.1 wordcloud 简介 

  • wordcloud.WordCloud() 代表一个文本对应的词云
  • 可以根据文本中词语出现的频率等参数绘制词云
  • 绘制词云的形状、尺寸和颜色均可设定
  • 以WordCloud对象为基础,配置参数、加载文本、输出文件

4.2 更加详细的词云讲解,可查看:词云讲解 该链接

4.3 导入可视化第三方库

import matplotlib.pyplot as plt
import jieba
import wordcloud
import matplotlib

4.4 将.xls文件中评论输出到.txt文件当中

workbook = xlrd.open_workbook(r"D:/pythonProject5/说好不哭.xls") #excel路径
#table = workbook.sheet_by_name(u'C')  # 按名字打开
table = workbook.sheet_by_index(0)  # 按顺序打开

nrows = table.nrows  # 行数
ncols = table.ncols  # 列数

l= []
for i in range(nrows):
    rows = table.row_values(i)  # 一行的值 list 浮点数
    l.append(rows)  #二维列表

t= ''
out_file = '说好不哭.txt'
with open (out_file,'w',encoding='utf-8')as f:  # 这是输出位置,修改即可,excel第一行与第一列别有序号
    for j in l:
        for k in range(ncols):
            t = t+str(j[3])+','  #拼接
        f.write(t.strip(','))  # 去逗号
        f.write('\n')
        t= ''

4.5 绘制词云,利用jieba提取词组与短语分析频次 


matplotlib.rcParams['font.sans-serif'] = ['simple']  # 设置绘图字体


def wordFreq(filepath, text, topn):
    # jieba分词库分词
    words = jieba.lcut(text.strip())
    counts = {}
    # 列表生成式获取停用词
    stopwords = [line.strip() for line in open('stop_words.txt', 'r', encoding='utf-8').readlines()]
    word_clear = []  # 用于生成词云的词语列表,避免重复分词,节约运行时间

    # 统计词频
    for word in words:
        if (len(word) == 1):
            continue
        elif word not in stopwords:
            if word == "伦":
                word = "周杰伦"
            elif word == "喜欢" :
                word == "好棒"
            elif word == "nice":
                word == "好!"
            elif word == "好听":
                word == "悦耳"
            word_clear.append(word)
            counts[word] = counts.get(word, 0) + 1

    items = list(counts.items())
    items.sort(key=lambda x: x[1], reverse=True)
    for i in range(topn):
        word, count = items[i]
        print(f"{word}:{count}")
    return word_clear


def gen_cloudword(txt):
    wcloud = wordcloud.WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf', width=1000, max_words=100, height=860,
                                 margin=2).generate(txt)
    wcloud.to_file("loud_star.png")  # 保存图片
    # 显示词云图片
    plt.imshow(wcloud)
    plt.axis('off')
    plt.show()


text = open('1.txt', "r", encoding='utf-8').read()
words_clear = wordFreq('1.txt', text, 20)

gen_cloudword(' '.join(words_clear))

 此时代码中加入了停顿词文件,目的是消除词频出现率较高没用词,例如:的、你、我、它等

大家可以随意加入自己想删除的无用词,例如我的停顿词为:

 若想用我的停顿词可以评论找我领取

运行结果词云展示:

这是各类词语出现的词频,这里统计了前20个 

五. 完整代码

import requests
import xlwt
import json
import xlrd
import matplotlib.pyplot as plt
import jieba
import wordcloud
import matplotlib
workbook=xlwt.Workbook(encoding='utf-8')
worksheet=workbook.add_sheet('说好不哭评论')
worksheet.write(0,0,'昵称')
worksheet.write(0,1,'时间')
worksheet.write(0,2,'点赞数')
worksheet.write(0,3,'评论')
n=1
for page in range(0,20):
    print('-'*100)
    url_left= 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=792727314&hostUin=0&format=json&inCharset=utf8&outCharset=GB2312&notice=0&platform=yqq.json&needNewCode=0&cid=205360772&reqtype=2&biztype=1&topid=237773700&cmd=8&needmusiccrit=0'
    url=url_left+'&pagenum='+str(page)+'&pagesize=25'
    headers={'User-agent':''}
    r=requests.get(url,headers=headers)
    data=json.loads(r.text)
    common_comments=data.get('comment').get('commentlist')
    for i in range(0,len(common_comments)):
        worksheet.write(n,0,common_comments[i].get('nick'))
        worksheet.write(n,1,common_comments[i].get('time'))
        worksheet.write(n,2,common_comments[i].get('praisenum'))
        worksheet.write(n,3,common_comments[i].get('rootcommentcontent'))
        n+=1
    print('第{}页评论爬取完成'.format(str(page)))
    print('-'*100)
workbook.save('说好不哭.xls')
# print(common_comments)


workbook = xlrd.open_workbook(r"D:/pythonProject5/说好不哭.xls") #excel路径
#table = workbook.sheet_by_name(u'C')  # 按名字打开
table = workbook.sheet_by_index(0)  # 按顺序打开

nrows = table.nrows  # 行数
ncols = table.ncols  # 列数

l= []
for i in range(nrows):
    rows = table.row_values(i)  # 一行的值 list 浮点数
    l.append(rows)  #二维列表

t= ''
out_file = '说好不哭.txt'
with open (out_file,'w',encoding='utf-8')as f:  # 这是输出位置,修改即可,excel第一行与第一列别有序号
    for j in l:
        for k in range(ncols):
            t = t+str(j[3])+','  #拼接
        f.write(t.strip(','))  # 去逗号
        f.write('\n')
        t= ''


matplotlib.rcParams['font.sans-serif'] = ['simple']  # 设置绘图字体


def wordFreq(filepath, text, topn):
    # jieba分词库分词
    words = jieba.lcut(text.strip())
    counts = {}
    # 列表生成式获取停用词
    stopwords = [line.strip() for line in open('stop_words.txt', 'r', encoding='utf-8').readlines()]
    word_clear = []  # 用于生成词云的词语列表,避免重复分词,节约运行时间

    # 统计词频
    for word in words:
        if (len(word) == 1):
            continue
        elif word not in stopwords:
            if word == "伦":
                word = "周杰伦"
            elif word == "喜欢" :
                word == "好棒"
            elif word == "nice":
                word == "好!"
            elif word == "好听":
                word == "悦耳"
            word_clear.append(word)
            counts[word] = counts.get(word, 0) + 1

    items = list(counts.items())
    items.sort(key=lambda x: x[1], reverse=True)
    for i in range(topn):
        word, count = items[i]
        print(f"{word}:{count}")
    return word_clear


def gen_cloudword(txt):
    wcloud = wordcloud.WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf', width=1000, max_words=100, height=860,
                                 margin=2).generate(txt)
    wcloud.to_file("loud_star.png")  # 保存图片
    # 显示词云图片
    plt.imshow(wcloud)
    plt.axis('off')
    plt.show()


text = open('说好不哭.txt', "r", encoding='utf-8').read()
words_clear = wordFreq('1.txt', text, 20)

gen_cloudword(' '.join(words_clear))

 谢谢大家~欢迎指正批评

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡不醒的恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值