python 爬取視頻評論生成詞雲圖
阿新 • • 發佈:2018-06-09
爬取評論生成詞雲
首先爬取評論寫入文件,用上一篇爬取騰訊是視頻的評論的方法提取評論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 爬取視頻評論生成詞雲圖