【Python3爬蟲】你會怎麼評價復仇者聯盟4?

1、寫在前面

最近復仇者聯盟4正在熱映中,不少人都去電影院觀看了電影,那麼對於這部電影,看過的人都是怎麼評價的呢?這時候爬蟲就能夠派上用場了!python

 

2、主要思路

首先打開豆瓣電影,而後進入復仇者聯盟4的詳情頁面:https://movie.douban.com/subject/26100958/,下拉頁面就能夠找到這部電影的短評了:git

雖然它顯示的短評有85751條,可是咱們卻沒有辦法獲取全部的短評,在未登陸的狀況下只能看到200條短評,登陸以後也只能獲得500條短評,但是隻有500條怎麼夠呢?因此咱們得想辦法獲得儘可能多的短評,思路爲分別選擇好評、通常、短評和最新,不過最新的短評只顯示100條,因此咱們能爬取的短評數量就是1600條github

當咱們把短評爬取下來以後,能夠先把短評數據保存到數據庫中,而後再對這些短評進行分析。這裏我選擇用MongoDB數據庫來保存數據,而後使用SnowNLP進行情感分析,再使用jieba分詞和wordcloud生成詞雲。數據庫

 

3、主要代碼

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。")

 

4、運行結果

 首先是進入MongoDB數據庫查看數據:

而後是使用SnowNLP進行情感分析獲得的結果,可見不少人都是很喜歡復仇者聯盟4的:

最後是生成的詞雲:

那麼,對於看了電影的你,你會怎麼評價這部電影呢?若是你沒有看過,會不會想要買一張電影票去看看呢? 

 

完整代碼已上傳到GitHub

相關文章
相關標籤/搜索