python 爬取视频评论生成词云图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. ") 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+' ') 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')
也可以用其他背景图生成不同个性的词云图
ok,词云图还是很好玩的。
以上是关于python 爬取视频评论生成词云图的主要内容,如果未能解决你的问题,请参考以下文章