用Python分析S11決賽EDGvsDK,教你怎么硬核吹EDG!

兄弟們,我們是冠軍,EDG是S11世界總冠軍!

世界上沒有無法征服的高峰,只有永不退縮一往無前的騎士!

真的,我賽前的心理預(yù)期非常低,我一直想的是EDG能贏一局就好,贏兩局血賺,結(jié)果一路打到第五局的時(shí)候,我心理已經(jīng)就一個(gè)詞:冠軍。

整個(gè)比賽過程深受全網(wǎng)關(guān)注:

微博熱搜第一名,顯示有8194萬觀看;

bilibili平臺(tái),吸引3.5億人氣,滿屏彈幕;

騰訊視頻600萬人看過;

斗魚和虎牙平臺(tái)的熱度也是居高不下;

賽后,央視新聞也發(fā)微博祝賀EDG戰(zhàn)隊(duì)奪冠;

既然比賽熱度這么高,那大家都說了點(diǎn)啥?

我們用Python分析了31000條彈幕數(shù)據(jù),滿屏都是粉絲的祝福與感受。

首先我們打開B站熱門排行榜,我們先來分析網(wǎng)頁,找到評論數(shù)據(jù)所在地方。

目標(biāo)獲取

我們此次獲取的目標(biāo)是EDG我們是冠軍視頻的60000+評論


網(wǎng)頁分析

首先我們F12找到如下評論數(shù)據(jù)

觀察發(fā)現(xiàn),我們所有爬取的評論信息全在在一個(gè)不規(guī)則的json文件當(dāng)中

不規(guī)則是因?yàn)榍懊娑嗔艘淮甹Query的字符串,后面多了一個(gè)')'

正中內(nèi)容才是一個(gè)標(biāo)準(zhǔn)的json數(shù)據(jù)集。



發(fā)送請求

先來獲取單頁數(shù)據(jù),在此之前我們先要獲取瀏覽器headers信息,防止被網(wǎng)站反爬。


url?=f'https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_{1636423610452+?page}&jsonp=jsonp&next={page}&type=1&oid=336587753&mode=3&plat=1&_={time_thick}'

headers?=?{

"cookie":"b_ut=-1;?i-wanna-go-back=-1;?_uuid=19DF1EDB-20B7-FF74-A700-9DF415B2429530977infoc;?buvid3=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc;?sid=jzp2723t;?fingerprint=2e74a5bc11a3adec2616987dde475370;?buvid_fp=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc;?buvid_fp_plain=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc;?DedeUserID=434541726;?DedeUserID__ckMd5=448fda6ab5098e5e;?SESSDATA=1fe46ad7%2C1651971297%2Ceb583*b1;?bili_jct=5bcd45718996ac402a29c7f23110984d;?video_page_version=v_new_home_14;?blackside_state=1;?rpdid=|(u)YJlJmmu|0J'uYJYRummJm;?bp_t_offset_434541726=590903773845625600;?bp_video_offset_434541726=590903773845625600;?bsource=search_baidu;?innersign=1;?CURRENT_BLACKGAP=0;?CURRENT_FNVAL=80",

'referer':'https://www.bilibili.com/video/BV12R4y1E7kn?spm_id_from=333.934.0.0',

'user-agent':'Mozilla/5.0?(Windows?NT?10.0;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/93.0.4577.8?Safari/537.36'

}

resp?=?requests.get(url,?headers=headers)

ifresp.status_code?==?requests.codes.ok:

#?獲取resp響應(yīng)

text?=?resp.text

如我們所想,獲取到的數(shù)據(jù)就是不個(gè)不規(guī)則的json數(shù)據(jù),接下來我們將其轉(zhuǎn)換成標(biāo)準(zhǔn)版的json數(shù)據(jù)便于我們接下來獲取數(shù)據(jù)

如下我們得到了一個(gè)標(biāo)準(zhǔn)的json數(shù)據(jù)集,接下來就可以獲取我們的評論數(shù)據(jù)了

#?獲取resp響應(yīng)

text?=?resp.text[41:-1]

#?轉(zhuǎn)換json格式

json_data?=?json.loads(text)

ic(json_data)

'''

ic|?json_data:?{'code':?0,

'data':?{'assist':?0,

'blacklist':?0,

'callbacks':?None,

'cm':?{},

'cm_info':?{'ads':?None},

'config':?{'read_only':?False,

'show_del_log':?True,

'show_up_flag':?True,

'showadmin':?1,

'showentry':?1,

'showfloor':?0,

'showtopic':?1},

'control':?{'answer_guide_android_url':?'https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6',

'answer_guide_icon_url':?'http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png',

'answer_guide_ios_url':?'https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12',

'answer_guide_text':?'需要升級成為lv2會(huì)員后才可以評論,先去答題轉(zhuǎn)正吧!',

'bg_text':?'看看下面~來發(fā)評論吧',

'child_input_text':?'',

'giveup_input_text':?'不發(fā)沒關(guān)系,請繼續(xù)友善哦~',

'input_disable':?False,

'root_input_text':?'發(fā)一條友善的評論',

'show_text':?'',

'show_type':?1,

'web_selection':?False},

'''

我們此次要獲取的數(shù)據(jù)有如下五個(gè),評論作者、性別、時(shí)間、評論點(diǎn)贊人數(shù)和評論內(nèi)容

#?獲取所有評論

datas?=?json_data['data']['replies']

foritemindatas:

#?評論者

name?=?item['member']['uname']

#?性別

sex?=?item['member']['sex']

#?評論時(shí)間

ctime?=?item.get('ctime')

content_time?=?time.strftime('%Y-%m-%d?%H:%M',?time.localtime(ctime))

#?點(diǎn)贊人數(shù)

star?=?item['like']

#?評論內(nèi)容

cmts?=?item['content']['message']

數(shù)據(jù)存儲(chǔ)

我們后續(xù)還要對數(shù)據(jù)進(jìn)行清洗處理然后可視化分析,所以這里我們使用openpyxl將數(shù)據(jù)存儲(chǔ)在excel中。

這個(gè)應(yīng)該都是老生常談了,畢竟之前我們經(jīng)常都是將數(shù)據(jù)存儲(chǔ)在excel中,

直接看代碼

ws?=?op.Workbook()

wb?=?ws.create_sheet(index=0)

wb.cell(row=1,?column=1,?value='評論者')

wb.cell(row=1,?column=2,?value='性別')

wb.cell(row=1,?column=3,?value='評論時(shí)間')

wb.cell(row=1,?column=4,?value='點(diǎn)贊人數(shù)')

wb.cell(row=1,?column=5,?value='評論內(nèi)容')

count?=2

wb.cell(row=count,?column=1,?value=name)

wb.cell(row=count,?column=2,?value=sex)

wb.cell(row=count,?column=3,?value=content_time)

wb.cell(row=count,?column=4,?value=star)

wb.cell(row=count,?column=5,?value=cmts)

count?+=1

ws.save('嗶哩嗶哩.xlsx')

效果如下:


多頁獲取

單頁數(shù)據(jù)獲取完畢,接下來我們分析多頁數(shù)據(jù)。你們呢一般是如何分析的?

我是直接獲取多個(gè)url進(jìn)行對比查找規(guī)律

https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610452&jsonp=jsonp&next=0&type=1&oid=336587753&mode=3&plat=1&_=1636423611589

https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610453&jsonp=jsonp&next=2&type=1&oid=336587753&mode=3&plat=1&_=1636424178396

https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610454&jsonp=jsonp&next=3&type=1&oid=336587753&mode=3&plat=1&_=1636424183583

https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_1636423610455&jsonp=jsonp&next=4&type=1&oid=336587753&mode=3&plat=1&_=1636424187787

規(guī)律如下:

規(guī)律找到了所以我們構(gòu)造多頁鏈接如下,先獲取它個(gè)100頁~

forpageinrange(1,100+1):

print(f'-----------------正在爬取第{page}頁數(shù)據(jù)-----------------')

time_thick?=?int(time.time()?*1000)

url?=f'https://api.bilibili.com/x/v2/reply/main?callback=jQuery17205690584633020348_{1636423610452+?page}&jsonp=jsonp&next={page}&type=1&oid=336587753&mode=3&plat=1&_={time_thick}'

100頁數(shù)據(jù)已經(jīng)成功存儲(chǔ)到excel中,如下:


數(shù)據(jù)預(yù)處理

我們先對評論數(shù)據(jù)先做清洗處理。

去重去空,然后隨機(jī)抽樣五條數(shù)據(jù)進(jìn)行展示

#?讀取數(shù)據(jù)

rcv_data?=?pd.read_excel('嗶哩嗶哩.xlsx')

#?刪除重復(fù)記錄和缺失值

rcv_data?=?rcv_data.drop_duplicates()

rcv_data?=?rcv_data.dropna()

#?抽樣展示

print(rcv_data.sample(5))

'''

評論者??性別??????????????評論時(shí)間???點(diǎn)贊人數(shù)???????????????????????????????????????????????評論內(nèi)容

9?????Doctor羅洛洛??保密??2021-11-07?10:44??10832?????????恭喜,尋思啥呢,趕緊把麥克風(fēng)給大伙放出來?兄弟萌送我上去,點(diǎn)贊里抽兩個(gè)冠軍皮膚記住我

820??變成光守護(hù)嘉然的貢品??保密??2021-11-07?02:32????157??路人差不多得了,求各位在宿舍的大爺們,大娘們,別亂叫了,有些淀粉要睡覺,有些不敢看直播的老淀...

960?????????華為云??保密??2021-11-08?00:22??????5??????????????????????????????????熱詞系列我們是冠軍熱詞系列燃起來了

923?????嘉然今天吃華為??保密??2021-11-07?16:09??????5?????????????????????????????????????????點(diǎn)贊抽一個(gè)送我大會(huì)員

849 ?我的小魚你睡著了對吧???女? 2021-11-07 02:13 ?? 225 ?那一年的總決賽是對,最終比分31。當(dāng)時(shí)我看見坐在椅子上笑得合不攏嘴,那一刻我就在想如果我能對...

'''


詞頻展示

我們從評論數(shù)據(jù)中獲取到前十大高頻詞匯如下:

#?詞頻設(shè)置

all_words?=?[wordforwordinresult.split('?')iflen(word)?>1andwordnotinstop_words]

wordcount?=?Counter(all_words).most_common(10)

x1_data,?y1_data?=?list(zip(*wordcount))

print(x1_data)

print(y1_data)

'''

('冠軍',?'點(diǎn)贊',?'中國',?'人送',?'年度',?'奪冠',?'關(guān)注',?'評論',?'個(gè)人',?'多少')

(749,?687,?470,?315,?254,?220,?151,?149,?141,?123)

'''

分別使用氣泡圖、樹狀圖、餅圖、突出顯示表和折線圖分別來可視化。


詞云展示

接下來我們使用stylecloud來生成多樣形式的詞云

wordlist?=?jieba.cut(''.join(c_title))

result?='?'.join(wordlist)

pic?='img1.jpg'

gen_stylecloud(text=result,

icon_name='fab?fa-windows',

font_path='msyh.ttc',

background_color='white',

output_name=pic,

)

print('繪圖成功!')


1. 本文詳細(xì)介紹了如何使用python獲取B站評論信息并且存儲(chǔ)處理數(shù)據(jù)到最后的可視化

有興趣的讀者可以嘗試自己動(dòng)手練習(xí)一下。

2. 本文僅供讀者學(xué)習(xí)使用,不做其他用途!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容