1. 程式人生 > >運用java爬蟲和python做詞雲圖

運用java爬蟲和python做詞雲圖

前言:

        最近有點時間,就寫個東西玩玩,就是分析電影評論做成詞雲圖。這次沒有采用python去爬取電影評論,而是採用了java中的多執行緒和執行緒池去爬取電影評論,但是用評論做詞雲圖使用python寫的。如果不喜歡用java做爬蟲的朋友,也可以換成用python語言寫,過程不是很重要,看自己喜好。

環境:

        windows 10 

        jdk 1.7

        python 3.5

成果:


作品連結:

請大家隨手 star 下不甚感激

            java多執行緒爬蟲的部分:https://github.com/vicoqi/java-crawl/tree/master/java_spider

            python 做詞雲圖的部分:https://github.com/vicoqi/python_crawl/tree/master/word-cloud

一、爬取電影評論

        這裡我抓取的電影評論是《肖申克的救贖》,當然你們也可以換電影爬取,只需要換到URL 中的 subject後面的id數就好。

        由於採用的是java語言寫的,所以我先說說思路。不想看思路的直接去github上看程式碼

        1)爬取代理網站上的代理IP 和埠,可以持久化到檔案中等下次用,不用每次啟動都去要去重新爬取代理網站上的代理Ip 和埠。收集 各種 USER-AGENT 頭,每次做請求時隨機切換。以上兩個步驟都是為了防止反爬蟲。

        2)把上一步收集到的代理資訊,進行驗證,驗證成功的儲存到set集合中,為後面定時持久化到檔案。儲存成功的就儲存到佇列中,為後面做出佇列與入佇列和重試。

        3)對訪問到的資料進行解析,這裡主要是採用了 jsoup 去解析。把解析資料儲存到磁碟。

 詳細的程式碼部分請移步上面的github連結關於java 部分。

二、對評論進行解析

        這個部分我採用的是python 語言寫的,因為這個分詞解析和第三部分的做詞雲圖很配合,所以我圖方便就都用python寫了。

        這個部分需要安裝python 的一些類庫:

        jieba、matplotlib、numpy、pillow 。

        所以我建議大家最好安裝好pip這個包管理器,需要什麼只需輸入 pip install 類庫名稱  就可以了。

        但是有時候你會發現安裝一些類庫用 pip 會失敗。所以下面我就從網上找了一些親測的解決辦法,裡面包括我上面所提到所有東西的安裝方法。

        https://blog.csdn.net/piaomaishuangshuang/article/details/52181604
        https://blog.csdn.net/heyuexianzi/article/details/76851377
        https://www.jianshu.com/p/7af0f10a2374

        詳細的程式碼部分請移步上面的github連結關於python 部分。

三、做詞雲圖

        根據上一步做的分詞解析結果,我們就可以做詞雲圖了。

        1)做詞雲圖之前我們需要一個類庫,那就是wordCloud庫,有了它我們才能做到文章開頭那樣的效果圖片。首先需要大家安裝這個wordcloud這個類庫。安裝辦法我也給大家如下:

https://www.jianshu.com/p/7af0f10a2374

        2)下載字型,因為這個wordcloud對中文的支援不太好,所以要下載 Yahei.ttf。

            字型下載連結如下:    

http://vdisk.weibo.com/s/uwZsrNXe4D4SG

        3)專案中有兩個python檔案,一個是帶背景圖的,一個是不帶的。可以看大家的喜好選擇

不帶背景圖的程式碼

#3、生成詞雲圖,這裡需要注意的是WordCloud預設不支援中文,所以這裡需已下載好的中文字型檔  
#無自定義背景圖:需要指定生成詞雲圖的畫素大小,預設背景顏色為黑色,統一文字顏色:mode='RGBA'和colormap='pink'  
wc = WordCloud(font_path=r"D:\Python\Python35-32\worl_cloud\Monaco Yahei.ttf",background_color='white',width=800,height=600,max_font_size=50,  
               max_words=1000)#,min_font_size=10)#,mode='RGBA',colormap='pink') 

帶背景圖的程式碼

#3、初始化自定義背景圖片  
image = Image.open(r'D:\pythonworkspace\word-cloud\back.jpg')  
graph = np.array(image)  
  
#4、產生詞雲圖  
#有自定義背景圖:生成詞雲圖由自定義背景影象素大小決定  
wc = WordCloud(font_path=r"D:\Python\Python35-32\worl_cloud\Monaco Yahei.ttf",background_color='white',max_font_size=50,mask=graph)  
wc.generate(result)  

不帶背景圖的效果圖:


詳細的程式碼部分請移步上面的github連結關於python 部分。


總結:

        用java爬蟲,讓自己實踐了多執行緒與執行緒池等知識,還用到了模板的設計思維。

        用python 做分析做詞雲圖,讓自己體會到了用python 做科學計數分析的強大與方便。