從數據角度探究《前任3》為什麼這麼火爆
1.《前任3》為什麼這麼火爆
截止發文時《前任3》票房15.50億,成為一匹黑馬,我習慣性的去豆瓣看了評分
豆瓣上8萬多人只打出了5.8的評分,其中1星-3星佔比72.6%,那麼問題來了,在絕大多數豆瓣粉絲都認為是「爛片」的情況下,究竟是什麼讓《前任3》票房意外火爆呢?
為了更能說明問題,通過一些輿情監測軟體,我參考了一些社交圈的一些數據
- 搜索微信公眾號前任3相關的文章,我們可以看到相關結果2w多,總閱讀數6006w+
- 我查看了點贊數最多的,竟然是蕊希的推文 <前任3>:謝謝和你愛過,也不遺憾最終錯過。點贊數22956 閱讀量10w+,這裡為什麼用竟然,是因為我也是蕊希忠實的聽眾啊,多少個成長的夜晚,是這個電台陪我入睡,多少個... 跑題了跑題了,此處省略一萬字
點進去仔細看了一遍,這篇文章主要還是以一些經典的情感語錄和分手的撕心裂肺來引起讀者的共鳴或者是往事,蕊希的文章總是寫的很成功,因為她知道什麼樣的內容可以打動讀者的內心情感,看評論就知道了
所以前任三之所以火爆的原因也許是因為:分手?畢竟「分手」是感情世界裡永不褪色的話題,也是最能觸發觀影者內心情感的話題,不過這只是我們的猜測。
作為一名程序員,我們當然不能只靠這些來說話,數據是最有說服力的,於是我爬取了一下豆瓣的影評。
2.採集豆瓣影評
有朋友私我說之前沒怎麼寫過使用框架採集數據的教程,回過頭想了想好像是很少使用框架去爬蟲了,最早的一篇還是Python網路爬蟲(六)- Scrapy框架,戳我複習,發現突然讓自己用Scrapy還的確忘記從哪開始了,於是對著電腦開始發獃,大概度過了十分鐘的賢者時間一下子重新掌握了Scrapy的整體思路,(明明複習了一兩個小時)。
戳我學習Scrapy
流程如下:- 創建一個Scrapy項目;
- 定義提取的Item;
- 編寫爬取網站的 spider 並提取 Item;
- 編寫 Item Pipeline 來存儲提取到的Item(即數據)。
- 提取資料庫數據,處理展示
- 創建項目,終端輸入
# 創建項目scrapy startproject douban_qrs# 進入項目目錄cd douban_qrs# 創建爬蟲文件scrapy genspider douban https://movie.douban.com
- 項目結構(不包括後續配置)
|-- douban_qrs/ # 項目文件夾 |-- scrapy.cfg # 項目發布配置 |-- spiders/ # 項目模塊存儲了實際的爬蟲代碼 |-- __init__.py # 模塊描述文件 |-- items.py # 定義了待抓取域的模型 |-- pipelines.py # 項目pipelines定義文件 |-- settings.py # 項目全局配置,定義了一些設置,如用戶代理、爬取延時等。 |-- spiders/ # 爬蟲模塊<開發> |-- __init__.py # 模塊描述文件 |-- douban.py # 爬蟲代碼
難題:scrapy實現模擬登錄
這裡我又重新去翻了一遍文檔,發現文檔中是有描述的參考文檔- scrapy中cookies的寫法,可以與request中cookie的寫法對比下
這裡我用了兩種方法解決這個問題,第一個是加cookie,效果不太理想,我換了第二種採用登錄的方式。
- 由於在登錄過程中可能需要輸入驗證碼,目前採用把驗證碼圖片保存至本地手動輸入(藉助一些打碼平台可以實現自動識別驗證碼輸入,收費)
def logged_in(self, response): img_code = response.xpath("//img[@id=captcha_image]/@src").extract() if len(img_code) > 0: print("請輸入驗證碼登錄") localpath = "/home/xsl/imgcode.jpg" # 將圖片下載到本地 urllib.request.urlretrieve(img_code[0], filename=localpath) print("請查看本地驗證碼圖片並輸入驗證碼") img_code_value = input() data = { "form_email": "你的賬號", "form_password": "您的密碼", "captcha-solution": str(img_code_value), } else: print("此時沒有驗證碼") data = { "form_email": "你的賬號", "form_password": "您的密碼", } print("登錄中.(? ??_??)?") return [scrapy.FormRequest(https://www.douban.com/login, formdata=data, callback=self.movie)]
3.詞雲和分布圖展示
def word_cloud(comment): logger.info(製作詞雲圖...word_cloud) comment_text = back_coloring = imread("static/zzb.jpg") cloud = WordCloud(font_path=static/simhei.ttf, # 若是有中文的話,這句代碼必須添加,不然會出現方框,不出現漢字 background_color="white", # 背景顏色 max_words=2000, # 詞雲顯示的最大詞數 mask=back_coloring, # 設置背景圖片 max_font_size=100, # 字體最大值 random_state=42, width_=360, height=591, margin=2, # 設置圖片默認的大小,但是如果使用背景圖片的話,那麼保存的圖片大小將會按照其大小保存,margin為詞語邊緣距離 ) for li in comment: comment_text += .join(jieba.cut(li, cut_all=False)) wc = cloud.generate(comment_text) image_colors = ImageColorGenerator(back_coloring) plt.figure("wordc") plt.imshow(wc.recolor(color_func=image_colors)) wc.to_file(前任三詞雲圖.png)def snowlp_analysis(comment): logger.info(自然語言處理NLP...snow_analysis) sentimentslist = [] for li in comment: s = SnowNLP(li) # logger.debug(li) # logger.debug(li, s.sentiments) print(li, s.sentiments) sentimentslist.append(s.sentiments) fig1 = plt.figure("sentiment") plt.hist(sentimentslist, bins=np.arange(0, 1, 0.02)) plt.show()
本來是想用至尊寶做一個詞雲圖的,找了好久沒找到素材,就用了之前我的一張壁紙
話說,詞雲圖好像並不能看出什麼~而分布圖表達的結果也並不直觀,那就代表本次的結果沒有什麼卵用,個人覺得是因為數據量太小了,而且詞雲圖本身對數據展示的結果只能看出高頻詞而已...我就不分析什麼了(我真的儘力了(? ??_??)?)
我也想像其他大佬一樣機器學習,數據分析啊源碼已上傳Github。
時光無法回頭,人生也不能重來,珍惜眼前人。
作者:_知幾
博客:_知幾的博客專欄出處:從數據角度探究《前任3》為什麼這麼火爆配套視頻教程:Hellobi Live | 1小時破冰入門Python公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。
推薦閱讀:
※【萌新寫爬蟲】爬知乎關注信息
※AI-challenger-stock 數據處理代碼
※Python一星期入門第4篇: 函數和異常處理
※Python3 是否已經完成了取代 Python2 的歷史進程?