python 爬取视频评论生成词云图


首先爬取评论写入文件,用上一篇爬取腾讯是视频的评论的方法提取评论http://blog.51cto.com/superleedo/2126099

代码需要稍作修改如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import urllib.request
import time
import urllib.error

##模拟浏览器安装headers
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)

vid="2701618945"
cursor_id="6410110614791238846"
str_id=1528290248106
url="http://coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor="+cursor_id+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_="+str(str_id)
curpat='"last":"(.*?)",'
userpat='"nick":"(.*?)",'
contpat='"content":"(.*?)",'

#下面要写入中文,用"w",不用"wb"
fh=open("/home/urllib/test/yun/data.txt","w")
fh.write("abci.\n")
fh.close()
#下面要写入中文,用"a",不用"ab"
fh=open("/home/urllib/test/yun/data.txt","a")

for i in range(1,100):
        data=urllib.request.urlopen(url).read().decode('utf-8')
        data=str(data)
        time.sleep(3)
        for j in range(0,10):
                next_curid=re.compile(curpat).findall(data)[0]
                content_list=re.compile(contpat).findall(data)
                userlist=re.compile(userpat).findall(data)
                try:
                        #解析成中文
                        t1=content_list[j].encode('latin-1').decode('unicode_escape')
                        print(t1)
                        fh.write(t1+'\n')
                except Exception as e:
#                       print("***********该条评论含有有特殊字符************")
                        continue
        url="http://coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor="+next_curid+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_="+str(str_id+1)

fh.close()

提取其中的一千条评论写入data.txt


下面处理词云,使用需要安装wordcloud ,jieba,scipy等多个插件

yum install bzip2 bzip2-devel -y

yum install tk-devel python3-tk

然后重新编译python3(防止bz2,tk报错)

./configure --prefix=/usr/python

make && make install

--------------------------------

安装词云处理

pip install wordcloud

pip install jieba

pip install scipy

----------------------------

准备一些文件

001.jpg                #词云图背景图

ciyun.py                #生成词云图的脚本

data.py                #爬取评论脚本

data.txt                #爬取的数据

msyh.ttf                #微软雅黑 中文配置文件

stopwords.txt        #需要屏蔽的词,注意stopwords文本中词的格式是'一词一行'

----------------------------


下面是脚本内容

#!/usr/bin/env python
# coding: utf-8
import jieba
##必须添加下面两行matplotlib声明
import matplotlib
matplotlib.use('Agg')
from scipy.misc import imread  # 处理图像的函数
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt

back_color = imread('001.jpg')  # 解析该图片作为词云分布型态

wc = WordCloud(background_color='white',  # 背景颜色
               max_words=1000,  # 最大词数
               mask=back_color,  # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略
               max_font_size=100,  # 字体的最大值
               stopwords=STOPWORDS.add('的'),  # 使用内置的屏蔽词,再添加'的'
               font_path="msyh.ttf",  # 解决显示中文乱码问题,文件在电脑的C:/Windows/Fonts/,选微软雅黑
               random_state=42,  # 为每个词返回一个PIL颜色
               # width=1000,  # 图片的长
               # height=618  #图片的宽
               )
# WordCloud各含义参数请点击 wordcloud参数
# 添加自己的词库分词,比如添加'真是醉了'到jieba词库后,当你处理的文本中含有真是醉了这个词,
# 就会直接将'真是醉了'当作一个词,而不会得到'醉了'或'真是醉'这样的词
jieba.add_word('醉了')

# 打开词源的文本文件
text = open('data.txt').read()
# 该stop_words函数的作用就是把屏蔽词去掉,使用这个函数就不用在WordCloud参数中添加stopwords参数了
# 把你需要屏蔽的词全部放入一个stopwords文本文件里即可
def stop_words(texts):
    words_list = []
    word_generator = jieba.cut(texts, cut_all=False)  # 返回的是一个迭代器
    with open('stopwords.txt') as f:
        str_text = f.read()
#        unicode_text = unicode(str_text, 'utf-8')  # 把str格式转成unicode格式  (python2.7使用)
        f.close()  
    for word in word_generator:
        if word.strip() not in str_text:
            words_list.append(word)
    return ' '.join(words_list)  # 注意是空格

text = stop_words(text)

wc.generate(text)
# 基于彩×××像生成相应彩色
image_colors = ImageColorGenerator(back_color)
# 显示图片
plt.imshow(wc)
# 关闭坐标轴
plt.axis('off')
# 绘制词云
plt.figure()
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis('off')
# 保存图片
wc.to_file('result.png')

image.png

image.png

也可以用其他背景图生成不同个性的词云图

image.png

image.png


ok,词云图还是很好玩的。
























猜你喜欢

转载自blog.51cto.com/superleedo/2126729