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


一、寫在前面

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

 

二、主要思路

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

雖然它顯示的短評有85751條,但是我們卻沒有辦法獲取所有的短評,在未登錄的情況下只能看到200條短評,登錄之后也只能得到500條短評,可是只有500條怎么夠呢?所以我們得想辦法得到盡量多的短評,思路為分別選擇好評、一般、短評和最新,不過最新的短評只顯示100條,所以我們能爬取的短評數量就是1600條

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

 

三、主要代碼

1.模擬登錄

這一步是很重要的,我們需要帶着登錄之后的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.情感分析

SnowNLP是python中用來處理文本內容的,可以用來分詞、標注、文本情感分析等,情感分析是簡單的將文本分為兩類,積極和消極,返回值為情緒的概率,越接近1為積極,接近0為消極。代碼如下:

 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.生成詞雲

首先要用jieba對評論進行分詞,然后我們要設置一些停用詞,比如標點符號、“你”、“我”、“一部”、“電影”等詞語,最后使用wordcloud模塊生成詞雲圖片。代碼如下:

 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM