1. 程式人生 > >python 爬取視頻評論生成詞雲圖

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')

技術分享圖片

技術分享圖片

也可以用其他背景圖生成不同個性的詞雲圖

技術分享圖片

技術分享圖片


ok,詞雲圖還是很好玩的。
























python 爬取視頻評論生成詞雲圖