import random # 隨機(jī)功能包
import time # 時間功能包
import numpy as np # nd.array數(shù)組處理包
import requests # 網(wǎng)絡(luò)請求包
from lxml import etree # 頁面解析包
import wordcloud # 詞云圖包
import matplotlib.pyplot as plt # 畫圖包
from PIL import Image # 圖片處理包
import jieba # 中文分詞包
class Douban:
def __init__(self):
# 50部高分電影的信息 (名稱 id url 評分) 等等
self.base_url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E8%B1%86%E7%93%A3%E9%AB%98%E5%88%86&page_limit=50&page_start=0'
self.comment_base_url = 'https://movie.douban.com/subject/%s/comments?start=%s&limit=20&sort=new_score&status=P'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
self.font = 'C:\Windows\Fonts\simhei.ttf'
##############################################################
##############################################################
##############################################################
# 注意需要改 這里的代碼 把圖片的地址 名稱 換一下 就可以了 例如
# self.image_list = ['C:\Users\Public\Desktop\測試.jpg']
#############################################################
#############################################################
#############################################################
self.image_list = ['./chunyin.jpg','./nezha.jpeg','./panda.png','./pingtou.jpg','./xin.jpg','./zhongguo.jpg']
def get_comment(self, movie_id): # 獲取該部電影影評
conments_list = []
for i in range(5): # 取5頁評論數(shù)據(jù)
comment_url = self.comment_base_url % (movie_id, i * 20) # 拼成評論頁面的完整鏈接
resp = requests.get(comment_url, headers=self.headers) # 請求評論的鏈接地址
html = etree.HTML(resp.content) # 解析網(wǎng)頁
comment_list = html.xpath('//*[@id="comments"]/div/div[2]/p/span/text()') # 獲取 網(wǎng)頁里的 評論
conments_list.extend(comment_list) # 合并列表
time.sleep(3) # 等待3秒 以免速度太快 被反爬蟲
return ''.join(conments_list) # 返回列表合并后的字符串
def cut_words(self, data): # 結(jié)巴分詞處理字符串
words_dict = {} # 新建一個空字典 用來之后存數(shù)據(jù)
words_list = jieba.lcut(data) # 處理 評論字符
for word in words_list: # 遍歷 已經(jīng)處理完成的 詞語
if len(word) == 1: # 單個詞語排除
continue # 開始下次循環(huán)
else: # 把詞語加入字典
words_dict[word] = words_dict.get(word, 0) + 1 # 遍歷所有詞語,每出現(xiàn)一次其對應(yīng)的值加 1
return words_dict # 返回{詞語:數(shù)量}的字典 數(shù)量越大 字體越大
def make_word_img(self,word_dict): # 制作圖片
mask = np.array(Image.open(random.choice(self.image_list))) # 隨機(jī)打開一張照片(背景圖,用于生成不同的詞云圖形狀)
wc = wordcloud.WordCloud(font_path='C:/Windows/Fonts/simhei.ttf', # 設(shè)置字體格式,一般windows都有這個
mask=mask, # 設(shè)置背景圖
background_color='white', # 設(shè)置背景顏色 (背景圖空白部分的顏色)
max_words=80, # 最多顯示詞數(shù) (每張圖片有多少個詞)
max_font_size=100, # 設(shè)置字體最大值
random_state=20, # 設(shè)置有多少種隨機(jī)生成狀態(tài),即有多少種配色方案
scale=6 # 設(shè)置生成的詞云圖的大小
)
wc.generate_from_frequencies(word_dict) # 從字典生成詞云
plt.figure(figsize=(7, 7)) # 設(shè)置圖片大小
plt.imshow(wc) # 把詞云加載成圖片
plt.axis('off') # 關(guān)閉坐標(biāo)軸
return plt # 返回已經(jīng)處理過的 詞云圖數(shù)據(jù)流
def start(self):
resp = requests.get(self.base_url, headers=self.headers) # 請求鏈接地址
try:
resp_dict = resp.json()
movies_list = resp_dict.get('subjects')
for i in movies_list: # 遍歷 這50部電影
movie_name = i.get('title') # 名稱
movie_id = i.get('id') # id
movie_rate = i.get('rate') # 評分
comments = self.get_comment(movie_id) # 去獲取對應(yīng)id 的評論
words_dict = self.cut_words(comments) # 拿到字符串 用結(jié)巴中文分詞 處理
plt = self.make_word_img(words_dict) # 把分詞完成后的字典拿去詞云圖處理
plt.savefig(''.join(['./wordcloud/', movie_name, movie_rate, '.jpg'])) # 把詞云圖數(shù)據(jù)流保存圖片
except:
print('請求失敗,被反爬了')
if __name__ == '__main__':
douban = Douban()
douban.start()
Python制作詞云圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
- 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...