首先爬取评论写入文件,用上一篇爬取腾讯是视频的评论的方法提取评论https://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')
也可以用其他背景图生成不同个性的词云图
ok,词云图还是很好玩的。
转载于:https://blog.51cto.com/superleedo/2126729