最近復仇者聯盟4正在熱映中,不少人都去電影院觀看了電影,那麼對於這部電影,看過的人都是怎麼評價的呢?這時候爬蟲就能夠派上用場了!python
首先打開豆瓣電影,而後進入復仇者聯盟4的詳情頁面:https://movie.douban.com/subject/26100958/,下拉頁面就能夠找到這部電影的短評了:git
雖然它顯示的短評有85751條,可是咱們卻沒有辦法獲取全部的短評,在未登陸的狀況下只能看到200條短評,登陸以後也只能獲得500條短評,但是隻有500條怎麼夠呢?因此咱們得想辦法獲得儘可能多的短評,思路爲分別選擇好評、通常、短評和最新,不過最新的短評只顯示100條,因此咱們能爬取的短評數量就是1600條。github
當咱們把短評爬取下來以後,能夠先把短評數據保存到數據庫中,而後再對這些短評進行分析。這裏我選擇用MongoDB數據庫來保存數據,而後使用SnowNLP進行情感分析,再使用jieba分詞和wordcloud生成詞雲。數據庫
1.模擬登陸json
這一步是很重要的,咱們須要帶着登陸以後的Cookie去發送請求才能獲得數據,固然也能夠打開瀏覽器登陸以後複製Cookie,具體怎麼作看我的喜愛。登陸豆瓣的url爲:https://accounts.douban.com/passport/login?,抓一下包就知道怎麼模擬登陸了,並無什麼難度。代碼以下:瀏覽器
1 def login(self): 2 """ 3 模擬登陸 4 :return: 5 """ 6 url = "https://accounts.douban.com/j/mobile/login/basic" 7 data = { 8 "ck": "", 9 "name": self.username, 10 "password": self.password, 11 "remember": "false", 12 "ticket": "" 13 } 14 res = self.session.post(url, headers=self.headers, data=data) 15 print("登陸成功!歡迎用戶:", res.json()["payload"]["account_info"]["name"])
2.情感分析session
SnowNLP是python中用來處理文本內容的,能夠用來分詞、標註、文本情感分析等,情感分析是簡單的將文本分爲兩類,積極和消極,返回值爲情緒的機率,越接近1爲積極,接近0爲消極。代碼以下:app
1 def analyze(self): 2 """ 3 情感分析 4 :return: 5 """ 6 result = self.col.find() 7 comments = [] 8 for i in result: 9 comments.append(i["評論"]) 10 sentiments_list = [] 11 for i in comments: 12 s = SnowNLP(i) 13 sentiments_list.append(s.sentiments) 14 plt.hist(sentiments_list, bins=np.arange(0, 1, 0.01), facecolor="g") 15 plt.xlabel('Sentiments Probability') 16 plt.ylabel('Quantity') 17 plt.title('Analysis of Sentiments') 18 plt.savefig("Sentiments.png") 19 print("情感分析完畢,生成圖片Sentiments.png")
3.生成詞雲ide
首先要用jieba對評論進行分詞,而後咱們要設置一些停用詞,好比標點符號、「你」、「我」、「一部」、「電影」等詞語,最後使用wordcloud模塊生成詞雲圖片。代碼以下:post
1 def generate(self): 2 """ 3 生成詞雲 4 :return: 5 """ 6 result = self.col.find() 7 comments = [] 8 for i in result: 9 comments.append(i["評論"]) 10 text = jieba.cut("\n".join(comments)) 11 12 # 文本清洗,去除標點符號和長度爲1的詞 13 with open("stopwords.txt", "r", encoding='utf-8') as f: 14 stopwords = set(f.read().split("\n")) 15 stopwords.update({"一部", "一場", "電影", "小時", "分鐘"}) 16 # 使用圖片 17 mask = np.array(Image.open("Avengers.jpg")) 18 19 # 生成詞雲 20 wc = WordCloud( 21 mask=mask, 22 stopwords=stopwords, 23 font_path="font.ttf", 24 max_font_size=200, 25 min_font_size=20, 26 max_words=100, 27 width=1200, 28 height=800 29 ) 30 wc.generate(' '.join(text)) 31 wc.to_file('Avengers.png') 32 print("詞雲已生成,保存爲Avengers.png。")
首先是進入MongoDB數據庫查看數據:
而後是使用SnowNLP進行情感分析獲得的結果,可見不少人都是很喜歡復仇者聯盟4的:
最後是生成的詞雲:
那麼,對於看了電影的你,你會怎麼評價這部電影呢?若是你沒有看過,會不會想要買一張電影票去看看呢?
完整代碼已上傳到GitHub!