Python制作詞云圖

import random  # 隨機(jī)功能包
import time   # 時(shí)間功能包
import numpy as np  # nd.array數(shù)組處理包
import requests  # 網(wǎng)絡(luò)請(qǐng)求包
from lxml import etree  # 頁(yè)面解析包
import wordcloud  # 詞云圖包
import matplotlib.pyplot as plt  # 畫(huà)圖包
from PIL import Image  # 圖片處理包
import jieba  # 中文分詞包


class Douban:
    def __init__(self):
        # 50部高分電影的信息 (名稱 id url 評(píng)分) 等等
        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\測(cè)試.jpg']
        #############################################################
        #############################################################
        #############################################################
        self.image_list = ['./chunyin.jpg','./nezha.jpeg','./panda.png','./pingtou.jpg','./xin.jpg','./zhongguo.jpg']

    def get_comment(self, movie_id):  # 獲取該部電影影評(píng)
        conments_list = []
        for i in range(5):  # 取5頁(yè)評(píng)論數(shù)據(jù) 
            comment_url = self.comment_base_url % (movie_id, i * 20)  # 拼成評(píng)論頁(yè)面的完整鏈接
            resp = requests.get(comment_url, headers=self.headers)  # 請(qǐng)求評(píng)論的鏈接地址
            html = etree.HTML(resp.content)  # 解析網(wǎng)頁(yè)
            comment_list = html.xpath('//*[@id="comments"]/div/div[2]/p/span/text()') # 獲取 網(wǎng)頁(yè)里的 評(píng)論
            conments_list.extend(comment_list) # 合并列表
            time.sleep(3)  # 等待3秒  以免速度太快 被反爬蟲(chóng)
        return ''.join(conments_list) # 返回列表合并后的字符串

    def cut_words(self, data):  # 結(jié)巴分詞處理字符串
        words_dict = {}  # 新建一個(gè)空字典  用來(lái)之后存數(shù)據(jù)
        words_list = jieba.lcut(data)  # 處理 評(píng)論字符
        for word in words_list:  # 遍歷 已經(jīng)處理完成的 詞語(yǔ)
            if len(word) == 1:  # 單個(gè)詞語(yǔ)排除
                continue  # 開(kāi)始下次循環(huán)
            else:   # 把詞語(yǔ)加入字典
                words_dict[word] = words_dict.get(word, 0) + 1  # 遍歷所有詞語(yǔ)桑涎,每出現(xiàn)一次其對(duì)應(yīng)的值加 1
        return words_dict  # 返回{詞語(yǔ):數(shù)量}的字典  數(shù)量越大 字體越大

    def make_word_img(self,word_dict):  # 制作圖片
        mask = np.array(Image.open(random.choice(self.image_list))) # 隨機(jī)打開(kāi)一張照片(背景圖,用于生成不同的詞云圖形狀)
        wc = wordcloud.WordCloud(font_path='C:/Windows/Fonts/simhei.ttf',  # 設(shè)置字體格式,一般windows都有這個(gè)
                                 mask=mask,  # 設(shè)置背景圖
                                 background_color='white',  # 設(shè)置背景顏色 (背景圖空白部分的顏色)
                                 max_words=80,  # 最多顯示詞數(shù) (每張圖片有多少個(gè)詞)
                                 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)處理過(guò)的 詞云圖數(shù)據(jù)流

    def start(self):
        resp = requests.get(self.base_url, headers=self.headers) # 請(qǐng)求鏈接地址
        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')  # 評(píng)分
                comments = self.get_comment(movie_id)  # 去獲取對(duì)應(yīng)id 的評(píng)論
                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('請(qǐng)求失敗,被反爬了')


if __name__ == '__main__':
    douban = Douban()
    douban.start()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末点骑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僧凰,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撮胧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡老翘,警方通過(guò)查閱死者的電腦和手機(jī)芹啥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)锻离,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人墓怀,你說(shuō)我怎么就攤上這事汽纠。” “怎么了傀履?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵虱朵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我钓账,道長(zhǎng)碴犬,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任官扣,我火速辦了婚禮翅敌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惕蹄。我一直安慰自己蚯涮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布卖陵。 她就那樣靜靜地躺著遭顶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泪蔫。 梳的紋絲不亂的頭發(fā)上棒旗,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音撩荣,去河邊找鬼铣揉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛餐曹,可吹牛的內(nèi)容都是我干的逛拱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼台猴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼朽合!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起饱狂,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤曹步,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后休讳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體讲婚,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年俊柔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筹麸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纳猫。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖竹捉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尚骄,我是刑警寧澤块差,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站倔丈,受9級(jí)特大地震影響憨闰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜需五,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一鹉动、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宏邮,春花似錦泽示、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至飒炎,卻和暖如春埋哟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郎汪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工赤赊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煞赢。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓抛计,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耕驰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爷辱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348