Python爬取15萬條《我是餘歡水》彈幕,看郭京飛如何演活極喪中年人

CDA數據分析師 出品

他來了他來了,正午陽光帶着新劇走來了。

年初時我們用數據解讀了幾部熱度高,但評分差強人意的國產劇,而最近正午陽光帶着兩部新劇來了,《我是餘歡水》和《清平樂》,截止到目前爲止,這兩部劇在豆瓣分別爲7.5分和7.9分,算是非常高的評分了。

今天我們就來跟大家聊一聊其中這部《我是餘歡水》。

01

這些年 我們追過的

正午陽光作品

都說作爲“國劇門臉”,正午陽光出品,必屬精品,每一部都讓人看得廢寢忘食。

我們先看到近年來正午陽光出品的作品,舉幾個例子你就知道了:

  • 2019年 都挺好 7.8分
  • 2018年 大江大河 8.8分
  • 2016年 鬼吹燈之精絕古城 8.0分
  • 2016年 歡樂頌 7.4分
  • 2015年 琅琊榜 9.3分
  • 2015年 僞裝者 8.5分

這些耳熟能詳的熱門劇集,分數都在7.5分以上,無論是劇情、演技、服化道都十分講究,真的算得上是國產劇中的良心製作了。

02

《我是餘歡水》

史上最慘男主的逆襲之路

這次《我是餘歡水》講的是個什麼故事呢?

《餘歡水》根據小說《如果沒有明天》改編,由《都挺好》編劇王三毛、王磊父子改編。由郭京飛、苗苗、高露、嶽暘等主演。

餘歡水(郭京飛飾)是公司裏業績最差的員工,退讓隱忍、得過且過是他的生存法則,直到嫌他窩囊的妻子提出離婚,餘歡水仍未做出改變。某日借酒澆愁後,餘歡水身體不適查出癌症,萬念俱灰的他破罐子破摔,性情大變,還在陰差陽錯之下,成了見義勇爲的英雄,到達人生巔峯。但陰差陽錯的命運仍在繼續,危機和挑戰接踵而至。

這部劇在播出後備受好評,首先一改普通國產劇動輒五六十集的巨幅,這部餘歡水僅僅12集,短小精悍,利落明快。加上主角們的演技都在線,劇情緊湊不拖沓,故事情節環環相扣,讓人看得酣暢淋漓,十分過癮。

03

《我是餘歡水》

大家都在怎麼看?

豆瓣評分:

目前在豆瓣上,《我是餘歡水》爲7.5分。共有11萬的人給出了評分,其中百分之30.8%給出了5星,40%的給出了4星,是非常不錯的成績。

知乎問答

我們分析整理了知乎上關於《我是餘歡水》的問答,可以看到:

我們把回答的角度主要分爲故事、角色和劇作三個角度。

關於劇作

討論的角度主要是“網絡短劇”的新形式十分有新鮮感,“結構緊湊”。同時還是那熟悉的“正午配方”,許多正午陽光其他劇的演員出現,總讓有種“熟臉連連看的”的感覺,很是有趣。

關於故事

很多人表示,《我是餘歡水》顯然講的是“一個社畜的故事”,餘歡水在職場的力不從心與無奈讓人同情。劇中把餘歡水遭遇車禍、離婚、誤診的窩囊人生悲劇用“喜劇效果”來展現。

關於角色

男主餘歡水、他的老婆甘虹、以及辦公室三人組趙覺民、魏總等人都是討論的焦點。

04

Python分析15萬彈幕

看看大家都在說些什麼

那麼觀衆們對《餘歡水》和劇中主要人物都是怎麼看的呢?

我們爬取了在騰訊視頻上本劇的彈幕,共計150252 條彈幕,每集平均就有 12521 條。

先看到主要結論:

大家有多愛發彈幕

再細看到每人彈幕發送的數量:

根據數據,在發送彈幕的人羣中,63.7%的人發了一條彈幕,16.9%發了兩條,少數比較話癆的人發了10條以上的彈幕,佔比3.63%。

哪些彈幕點贊最多?

點贊最高的彈幕也特別有意思,比如:

  • 餘歡水——國家一級退堂鼓表演藝術家
  • 記住!這是一瓶改變命運的假酒
  • 你摔倒了,我們很同情馬路
  • 對不起,但是真的好想笑

真是讓人感嘆,這屆網友實在是太有才了。餘歡水都這麼慘了,你們還嘲笑他,真是太壞了。

彈幕裏大家都在討論誰?

根據分析我們可以看到,討論最多的當然是我們的男主了,有3974條彈幕都是關於餘歡水的。

討論最多的第二名是誰?你們絕對想不到,居然是公司三人組,餘歡水的上司之一樑安妮,收穫了2158條彈幕。比餘歡水老婆甘虹的彈幕高出近一倍。

人物彈幕畫像:

我們再根據主要人物的彈幕,整理出各個人物的畫像,首先是餘歡水,大家提到最多的就是演員郭京飛的演技,吊打一衆小鮮肉,妥妥的用實力說話。

餘歡水

餘歡水也被觀衆戲稱爲“好慘一男的”,各種“窩囊”、“慫”、“慘”“令人心疼”,從中也看到了人到中年的無奈與現實。除此之外大家也瘋狂串戲到了《都挺好》裏的“蘇明成”,感覺男主這麼慘,看來編劇是想讓餘歡水給蘇明成還債呀。

甘虹

我們再看到餘歡水老婆甘虹的畫像,大家提到最多的關鍵詞是“大嫂”,要知道在都挺好裏,高露演的是郭京飛的大嫂,這一轉眼兩人從叔嫂演成了夫妻。

樑安妮

看到收穫彈幕第二高的角色——樑安妮。觀衆們都沉迷於她的演技,“性感”、“撩人”“好看”等都是關鍵詞。認爲這個角色是妥妥的魅力擔當,演員高葉把這個人物的氣質拿捏的死死的,果然漂亮小姐姐大家都喜歡。

趙覺民

再聊聊正午的金牌配角嶽暘。聽名字可能不太熟悉,但看臉就知道了,正午的劇裏哪哪都有他。《我是餘歡水》裏,他演的是的領導趙覺明。他在《鬼吹燈之精絕古城》裏演的是“大金牙”;到了《歡樂頌》,他演的是樊勝美的哥哥"樊勝英"。在彈幕裏這兩個角色名也常常被大家提到。

下面看到具體分析過程

此次分析我們獲取騰訊視頻的彈幕並進行數據數據,數據獲取部分的具體思路如下:

  1. 分析網站URL規律,獲取彈幕數據URL請求接口和請求方式
  2. 分析彈幕URL規律分析,獲取翻頁規律

數據獲取

分析網站和數據定位

打開騰訊視頻《我是餘歡水》視頻隨便選取一集,觀察我們需要抓取的彈幕,可以明顯看出來彈幕不是在視頻上的而是浮動在視頻上面,而且彈幕在視頻播放之後才滾動加載,所以我們大概能得出彈幕是JS異步加載的。

我們使用谷歌瀏覽器,右鍵審查元素,觀察Network的請求,播放開始後出現了大量請求,我們在js選項下發現了一個比較特殊的請求 “danmu” ,打開這個請求後發現這就是我們要的彈幕數據。

切換到Headers下獲取到彈幕數據的URL地址:

http s://m http://fm.video.qq.com/da nmu?otype=json&callback=jQuery19106242753790025646_1587109875909&target_id=5035751775%26vid%3Dy0033grdnk8&session_key=93970%2C2557%2C1587109877×tamp=195&_=1587109875933

彈幕URL規律分析

首先,我們嘗試刪掉目標網址中不影響最終結果的部分參數,從而精簡出網址如下:

ht tps://mfm.vi http://deo.qq.com/danmu?target_id=5035751775&vid=y00 33grdnk8×tamp=15

將第二,三個請求拿出來精簡:

htt ps://http://mfm.video.qq.co m/danmu?target_id=5035751775&vid=y00 33grdnk8×tamp=45

htt ps://http://mfm.video.qq.co m/danmu?target_id=5035751775&vid=y00 33grdnk8×tamp=75

對比很容易找到規律,從第一頁到第二頁,timestamp值從15變到了45,第二頁到第三頁從45到75,target_id不變。

這個規律我們可以大膽猜測這個 timestamp 值是控制頁數的,並且起始值是15每30秒更新一次。

一集視頻彈幕有多少頁呢?如何獲取最後一個timestamp的值。

有一個小技巧,我們在構建URL地址的時候指定一個足夠大的結尾步長,然後當獲取不到內容時終止循環即可。

不同集之前我們需要尋找target_id的代碼規律,此處暫不做贅述。

具體代碼如下:

# 導入所需庫
import requests
import json
import time
import parsel
import pandas as pd

def get_danmu_one_page(url_dm):
    """
    :param url_dm: 視頻彈幕URL地址
    :return: 一頁的彈幕數據
    """
    # 添加headers
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
        'cookie': '你的電腦登錄後的cookie信息',
        'referer': 'https://v.qq.com/x/cover/mzc00200bll9mha.html',
    }

    # 發起請求
    try:
        r = requests.get(url_dm, headers=headers, timeout=3)
    except Exception as e:
        time.sleep(3)
        r = requests.get(url_dm, headers=headers, timeout=3)

    # 解析網頁
    data = r.json()['comments']

    # 獲取評論ID
    comment_id = [i['commentid'] for i in data]
    # 獲取用戶名
    oper_name = [i['opername'] for i in data]
    # 獲取會員等級
    vip_degree = [i['uservip_degree'] for i in data]
    # 獲取評論內容
    content = [i['content'] for i in data]
    # 獲取評論時間點
    time_point = [i['timepoint'] for i in data]
    # 獲取評論點贊
    up_count = [i['upcount'] for i in data]

    # 存儲數據
    df_one = pd.DataFrame({
        'comment_id': comment_id,
        'oper_name': oper_name,
        'vip_degree': vip_degree,
        'content': content,
        'time_point': time_point,
        'up_count': up_count
    })
    return df_one

def get_danmu_all_page(target_id, vid):
    """
    :param target_id: target_id
    :param vid: vid
    :return: 所有頁彈幕
    """
    df_all = pd.DataFrame()
    # 記錄步數
    step = 1
    for time_stamp in range(15, 100000, 30):  # 右側設置一個足夠大的數
        try:  # 異常處理
            # 構建URL
            url_dm = 'https://mfm.video.qq.com/danmu?target_id={}&vid={}×tamp={}'.format(target_id, vid, time_stamp)
            # 調用函數
            df = get_danmu_one_page(url_dm)
            # 終止條件
            if df.shape[0] == 0:
                break
            else:
                df_all = df_all.append(df, ignore_index=True)
                # 打印進度
                print('我正在獲取第{}頁的信息'.format(step))
                step += 1
                # 休眠一秒
                time.sleep(1)
        except Exception as e:
            continue

    return df_all

獲取到的數據如下所示,共計爬取了 150252 條彈幕(每集平均12521條,每30s的間隔爬取),來看看彈幕下的餘歡水。

主要包含了以下信息:集數、評論ID、用戶名、vip等級、評論內容、評論時間點和評論點贊。

疫情當下,昔日匆匆的步伐終於放慢了些,也是時候好好想想自己的職業計劃和人生規劃了。提前做好準備,未雨綢繆,爲未來蓄能——蓄勢待發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章