分析《嚮往的生活3》彈幕了解真正的「慢生活」

  • 2019 年 10 月 8 日
  • 筆記

作者 | 超哥

來源 | 超哥的雜貨鋪

本文轉載自超哥的雜貨鋪

以清凈心看世界;

用歡喜心過生活。

超哥的雜貨鋪,你值得擁有~

《嚮往的生活》是湖南衛視一檔十分溫馨的生活類真人秀綜藝節目,目前第三季正在更新中,常駐嘉賓加入了張子楓,深受廣大觀眾的喜歡。而該節目的豆瓣評分也達到了7.9。這檔綜藝以明星藝人到村寨里體驗生活為主線,融入了美食,勞動,幽默的元素,讓人邊看邊有身臨其境的感覺,彷彿自身也真正進入了「嚮往的生活」。

嚮往的生活豆瓣評分

近些天在看節目的時候,看到彈幕上大家討論的特別熱鬧,突發奇想能不能把所有的彈幕爬下來做一下分析呢。一方面探究一下彈幕數據抓取有沒有特別之處,另一方面通過彈幕對這個節目的口碑一探究竟。接下來以上周五剛更新的第5期為例,進行彈幕數據抓取。代碼主要使用requests庫,抓取結果存儲在csv文件中。

網頁分析

在芒果TV網頁版打開第5期節目,等待廣告加載完畢,同時打開chrome開發者工具的network選項卡。由於請求很多,而且隨着時間推移,會越來越多。所以我採取了先清空再等待的方式。發現前面大多加載的都是圖片,自然這不是我們的目標。過了一會兒之後,發現一條可疑的請求,見下圖所示,點擊一看,真的出現了彈幕內容。interval是60,猜測可能是表示一個間隔,每60s會有一個新的請求。於是使用filter過濾了以「rdb」開頭的請求,發現這些都是彈幕,而且next都是60000的倍數,猜測表示的是60000毫秒,也就是60秒。

找到彈幕請求鏈接

過濾彈幕請求

接下來我們需要確認彈幕的翻頁邏輯,也就是這些彈幕鏈接的統一規律。這裡推薦一個很好用的網頁請求分析工具postman。它不僅可以用來分析網頁的請求參數,還能夠提供不同語言的請求代碼,稍加修改就可以使用。把剛剛我們找到的鏈接貼到postman中。如圖所示,可以看到請求的參數,點擊send按鈕之後能看到請求的結果。由於參數很多,可以考慮去掉一些無用的參數。最終發現,只需要保留vid,cid,time三個參數即可。猜測vid表示節目id,cid表示視頻id,time應該是請求時刻,是一個相對值。並且請求結果中,而每一條彈幕的時間,都要比time數值大。結合上文的分析邏輯,可以得出每一個請求結果都是請求時間60s內的彈幕。如果我們要獲取所有的彈幕,就可以通過改變time的值來實現。最小的time取值應該是0,最大的應該就是和視頻時長最接近的60000倍數的毫秒數。這裡的節目時長為89:49。經過驗證,果然如此,接下來我們就可以用代碼來實現了。

使用postman測試請求參數

使用postman測試time請求參數

代碼實現

使用requests構造網絡請求,並用一個循環控制翻頁,爬取全部的彈幕。解析返回的json數據並使用pandas存儲到Excel中。詳細代碼如下所示,一共45行。

註:左右滑動查看全部代碼

import requests  import pandas as pd  import time  import datetime  from fake_useragent import UserAgent    ua = UserAgent()  url = "https://galaxy.bz.mgtv.com/rdbarrage"    rdb_content = {'id': [], 'type': [], 'uid': [], 'content': [], 'add_time': [], 'ups': []}  count = 0    print("爬取開始時間: {}".format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))    for i in range(0, 91):        querystring = {"version": "2.0.0", "vid": "5683459", "cid": "328724", "time": i*60000}        headers = {          'User-Agent': ua.random          }        try:          response = requests.request("GET", url, headers=headers, params=querystring).json()          items = response['data']['items']          if items is None:              print("爬取完畢!彈幕數量{}".format(count))              break          else:              for item in items:                  rdb_content['id'].append(item.get('id')) #彈幕id                  rdb_content['type'].append(item.get('type')) #彈幕類型                  rdb_content['uid'].append(item.get('uid')) #用戶id                  rdb_content['content'].append(item.get('content')) #彈幕內容                  rdb_content['add_time'].append(item.get('time')) #彈幕時間                  rdb_content['ups'].append(item.get('up', 0)) #d彈幕點贊數                  count = count + 1                print("爬取第{}分鐘的彈幕...,當前彈幕數量{}".format(i + 1, count))          time.sleep(5)      except:          print("第{}分鐘彈幕爬取失敗!當前彈幕數量{}".format(i + 1, count))          continue      rdb_df = pd.DataFrame(rdb_content)      rdb_df.to_csv('rdb.csv', index=None)  

運行效果截圖:

爬蟲運行效果

可以看出,在本次爬取時,彈幕數量已經將近3w條,而此時節目更新還不到2天,在一定程度可以反映出該節目的火爆程度。接下來我們對彈幕數據做一些深入的分析,從數據的角度看這期節目。

數據可視化

以上爬取的數據,有一些字段存在缺失,但是佔比極小,因此採取刪除的方式處理,最終剩餘28602條有效數據。

數據預處理-刪除重複值

01 不同時間段彈幕數量的分佈

節目時長大約90分鐘,我們分別以1分鐘和10分鐘為單位,看一下彈幕數量。每分鐘彈幕都在200以上,最小的為207,最大的為360,平均值為318。30-40分鐘彈幕最多,一般此時是節目的高潮時段,80-90分鐘彈幕數量最少,此時節目已經接近尾聲。可以看出,雖然隨着時間推移,彈幕數量有所波動,但整體來講,在各個時間,彈幕波動不劇烈,也反映齣節目能夠持續保持較高的熱度,可謂「分分鐘都是精彩」。

每分鐘彈幕數量柱形圖

每十分鐘彈幕數量柱形圖

02 不同長度的彈幕數量分佈

不同彈幕長度柱形圖

可以看出,彈幕長度最大為64,長度越長,彈幕數量越少,長度為6的彈幕數量最多,達到2470條。大多數彈幕的長度都集中於10個字上下,趨向於口語化。這也符合我們的認知,10字左右已經足以表達用戶看劇的心情和觀點。當然也有不嫌麻煩的用戶,彈幕數量達到了30字以上,也有極少量的彈幕長度達到了50以上。出於好奇,我們可以看一下長度超過50的彈幕都說了啥,見下圖所示,多少能夠感受到觀眾十分走心地在享受節目。

長度超過50彈幕 03 彈幕點贊數分佈

點贊數量區間

可以看出有接近四分之一分彈幕沒有獲得點贊。近6成的彈幕點贊量在20以下,點贊量20以上的彈幕不到20%。我們同樣可以看一下點贊大於300的彈幕都說了啥,但從彈幕就能感受到節目整體的歡樂氣氛。

點贊超過300彈幕

04 用戶發佈的彈幕數量,點贊數,彈幕總字數對比

我們的數據中共有17268名用戶發佈了28602條彈幕,人均發佈彈幕1.66條。按照點贊數降序排列取前10,觀察彈幕數量,點贊數,彈幕總字數。可以看出,點贊數高的用戶,發佈的彈幕數量也多,字數相應也很多。下圖只展示了前10的情況,也可以調整下面的區間,看更多用戶的彈幕表現。需要指出的是,只能取到用戶ID,無法分析用戶的偏好情況。

各用戶彈幕情況對比

05 彈幕使用emoji表情情況

彈幕emoji表情使用情況我們的數據中,使用表情的彈幕數量為1430,共使用了166種,2439次表情,"笑哭"?這個表情使用數量最多,遠遠超過其他表情。一定程度上說明了這個表情受歡迎的程度,也側面反映齣節目本身的幽默效果很多,讓網友們哭笑不得。

06 詞雲圖

通過對彈幕進行分詞處理,繪製出以下的詞雲圖。

彈幕詞雲圖

看着這個詞雲圖,瞬間感覺有溢出屏幕的歡樂,好像耳朵也能音樂聽見斷斷續續的「哈哈哈哈」聲,群眾的眼睛是雪亮的,能讓人如此開心的節目,火起來自然也就不足為奇了。

至此,我們基本完成了《嚮往的生活》第5期節目彈幕的抓取與簡單的可視化分析工作。更多有趣的點大家可以自己去分析和發現。