python wordcloud 對電影《我不是潘金蓮》制作詞雲
上個星期五(16/11/18)去看了馮小剛的最新電影《我不是潘金蓮》,電影很長,有點黑色幽默。看完之后我就去知乎,豆瓣電影等看看大家對於這部電影的評價。果然這是一部很有爭議的電影,無論是在知乎還是豆瓣,大家對這部電影褒貶不一,有的說拍的好,寓意深刻,具有很強的現實諷刺意味,也有的說故作矯情,是一部爛片。大家眾說紛紜,那么這部電影到底怎么樣呢?我想還是用事實說話比較好。我想到最近剛好我學習了一段時間的爬蟲了,也知道詞雲可以形象地反映詞語分布。所以我決定親自動手對《我不是潘金蓮》制作一個詞雲。
先說一下使用的工具:python2.7.12 wordcloud1.2.1 selenium2.53.6 jieba(一個中文分詞工具) 分析的文本來源為豆瓣電影下《我不是潘金蓮》的1.6W+評論。
selenium 是一個可以操縱瀏覽器的爬蟲工具,對於抓取動態頁面(js生成的頁面)非常方便。這里之所以使用selenium的一個主要原因是,電影的評論只有在登錄之后才可以全部抓取,如果使用urllib2等標准庫模擬登錄,因為還要處理驗證碼等,略顯麻煩,而使用selenium則非常簡便。
jieba 是一個優秀的中文分詞工具,功能強大並且使用簡便,這里因為涉及到中文,wordcloud對於中文的分詞支持不是特別好,所以需要我們手動分詞,我把這個任務交給了jieba。
制作詞雲的流程如下:
1.使用selenium 登錄豆瓣,抓取《我不是潘金蓮》下所有電影評論,並且保存到txt文件(一行是一條評論)
2. 使用jieba 對於評論進行分詞,得到新的文本
3. 對於新的文本 使用wordcloud 進行制作詞雲
話不多說,下面直接貼代碼:
有幾點需要說明:
1.使用selenium簡化了登錄抓取過程,但是也有一個缺點,因為需要啟動瀏覽器,所以抓取效率就比較低,電影評論頁數較多,有時會出現網頁加載過慢等情況導致無法正常抓取數據。所以這里使用n,count作為標記,記錄意外退出時上次抓取的位置,這樣下次可以繼續從上次中斷的地方抓取。
2. wordcloud 默認的是英文字體,所以在WordCloud()方法中需要指定一個中文字體的位置(可以使用windows自帶的中文字體,比如宋體,楷體都可以),使用font_path="字體路徑"
3. selenium 如果驅動狐火瀏覽器的話,需要自行下載驅動(一個.exe文件),具體方法可以自行上網搜索,這里不贅述。
最后 下載的評論文本文件我已經放到我的github(https://github.com/Lyrichu/selenium/blob/master/pjl_comment.txt),有興趣的朋友可以自己下載。最后得到的詞雲圖如下: