这段时间奇怪了,周围朋友都爱上了同一个口头禅“我不要你觉得,我只要我觉得”;我就纳闷了汉语文字那么多,你们偏偏都爱上了同一句,我怀疑他们在玩梗,果不其然,在B站的鬼畜区了解到了真相。
绿大暗仅凭一己之力,将综艺节目《中餐厅3》推上了热门,成为了本季度当之无愧的综艺之王,“我不要你觉得,我只要我觉得”,“别说话,听我的”等是绿大暗的经典名言,这些名言被称为“明学”,甚至隐隐与“六学”齐名,两开花。
对一部视频作品,如果说评论是观众观看后的沉思,那么弹幕就是吃瓜群众情感的实时流露,为了一窥“明学”的真谛,我打算爬一爬《中餐厅3》的弹幕数据,做一个情感分析。
废话不多说,“起锅烧油”
一、分析网页爬数据
1.确认加载方式
《中餐厅3》在芒果TV独播,打开Chrome浏览器,访问第1集的链接https://www.mgtv.com/b/330026/6086563.html
,通过禁用页面javaScript发现页面视频和弹幕都无法加载,并且右键-查看页面源码,搜索不到弹幕的文字,说明数据是异步加载的
2.抓包分析
打开刚刚关闭的javaScript,重新加载页面,F12
打开开发者工具,仔细查找XHR
或JS
最终在js中找到了弹幕数据,链接是这样的
https://galaxy.bz.mgtv.com/rdbarrage?version=2.0.0&vid=6086563&abroad=0&pid=&os=&uuid=&deviceid=&cid=330026&ticket=&time=60102&mac=&platform=0&callback=jsonp_1568127366004_84552
弹幕数据是json格式,但是伪装成了jQuery藏在JS里面。
3.链接分析
从抓包的地址看,弹幕的真实请求地址是https://galaxy.bz.mgtv.com/rdbarrage?
,其后是一堆相关的参数,相关的参数见下图
上图中许多参数字段是没有值的,所以我们试着简化请求地址链接,最终发现https://galaxy.bz.mgtv.com/rdbarrage?vid=6086563&cid=330026&time=60102
仍然可以请求成功,也就是说只保留vid
,cid
.time
3个参数就可以了
接下来分析vid
,cid
.time
这3个参数
首先我们把前3期的url列出来
第1期:https://www.mgtv.com/b/330026/6086563.html
第2期:https://www.mgtv.com/b/330026/6128068.html
第3期:https://www.mgtv.com/b/330026/6168375.html
发现上述url中330026
没有变化,只有后面的一串文字发生了变化,通过和下图中参数对比,发现url中第一个不变的数字串就是我们要寻找的vid
,而后面的数字串就是cid
,不难看出,vid
是“中餐厅3”在芒果TV平台中的编号,而cid
是中餐厅3不同期数的编号。
那么参数time
是什么?
首先通过time
英文的本身来看,她是一个和时间有关系的变量,那么可以有以下猜测
1. time
是本波弹幕开始加载的时间;
2. time
是本波弹幕播放的总时长
然后观察4条相邻的弹幕js数据,当前弹幕的next
的值和下一条弹幕js文件请求的time
值非常接近,于是尝试把
https://galaxy.bz.mgtv.com/rdbarrage?vid=6086563&cid=330026&time=120083
中的time
值修改为120000
,然后再次请求数据,发现仍然可以成功请求到对应的数据
上图中在next
参数的旁边还有个参数interval
,她的英文意思是“间隔,间距”,而弹幕的time
值依次是60000、120000、180000….,差值为60000,所以推测next=1000*interval
,所以很有可能next
的单位是ms,而interval
的单位是s。
为了验证猜想,我们把视频进度条拉到最后,本期的视频长度为104.01分钟,而最后一条弹幕的next
为6240000,6240000ms转化为分钟刚好是104min,验证成立:time
是每条弹幕开始播放的时间。
至此所有的参数都已经搞清楚了
二、爬取数据
采用request请求数据,导入我们需要调用的包
import requests
import json
import pandas as pd
import time
首先定义一个主函数用来获取每条弹幕js文件的内容,并将获得的数据转化为json格式。传入的参数time_zimu
是每条弹幕开始播放的时间
def main(time_zimu):
url='https://galaxy.bz.mgtv.com/rdbarrage?vid=6337608&cid=330026&time='+str(time_zimu)
html=requests.get(url,headers=headers)
html.encoding="utf-8"
html_data=html.text[html.text.find('['):-2]
html_data_json=json.loads(html_data)
这需要注意一点,因为我们要获取的json数据是在jQuery中,为了避免出错,我们这里直接获取json部分的数据html_data=html.text[html.text.find('['):-2]
,效果如下图
将数据转为json格式后,其中type
,uid
,content
,time
是我们想要的数据
构造获取弹幕信息函数,传入json的数据orgin_data
,通过循环重复取出单条弹幕信息,并提取对应的字段
def get_infos(orgin_data):
for infos in orgin_data:
yield[
infos['type'],
infos['uid'],
infos['content'],
infos['time']
]
构造保存数据函数,将获得的数据构建成DaraFrame,将数据保存到csv文件中
def save_data(single_data):
data=[]
data.extend(single_data)
columns=['type','uid','content','time']
data_frame=pd.DataFrame(data=data,columns=columns)
data_frame.to_csv('data2019.csv',mode='a')
最后封装函数,循环获取所有弹幕文件
if __name__ == "__main__":
time_c=60000 #加载弹幕时间间隔
for i in range(0,110): #此处110取决于最后弹幕的出现时间
print('开始 时间为'+str(i)+'的字幕')
main(time_c*i)
time.sleep(3)
三、展示成果
运行爬虫,开始工作爬取弹幕
展示下我们爬取到的弹幕数据文件的前几行数据,达成获得弹幕数据成就
data=pd.read_csv('data2019.csv')
print(data.head())
四、one more thing
这篇文章并没有太大难度,但是对于新手来说,网上的的教程都集中在代码部分,而前期的分析工作则一笔带过,其实这部分才是最重要的部分,这也是我写本文的初衷。
本文完整代码,扫描下方二维码在「小詹学Python」后台回复「中餐厅」即可获取!
《中餐厅》弹幕数据分析,我不要你觉得,我只要我觉得!
agxoolpkcse
gxoolpkcse http://www.gu3h8gefc9rtb09k6l4826uq6p3042m0s.org/
[url=http://www.gu3h8gefc9rtb09k6l4826uq6p3042m0s.org/]ugxoolpkcse[/url]
2 Flutes Carbide End Mill Suppliers for Sale
Grain Metal Detector
Fan
7ml glass vial
Bimetallic Extrusion Barrel Screw
Shanghai University of Political Science and Law
Flat mask/KN95 mask string auto-Welding machine
Beans Packaging Machine
GW 4C20
Benq Interactive Flat Panel Pdf
lift gas spring for industry
Best mask factory
Lock Nuts
Dictator Door Closer
Hot Rolled Steel Tubes Price
File Tray Price
Mini Electric Grinder Factory
Hydraulic Pressure Pipe Factory
Carpet Tiles Pvc Spc Vinyl Flooring
Lock Device Factory
Jiangsu Sidefu Textile Co., Ltd.
27 Double Wall Oven
Fiber Bulk
SMC Standard Square Cylinder Tube
China Molding Casting Flask
Plastic Mould Parts
36-6 With Purity 99% – 1 2 3-Trimethoxybenzene
澳门博狗
Cut Glass Whisky Tumblers Supplier
Pulp Box For Cosmetics
Hotel Bath Gel Price
Bain Non Rebreathing Circuit
Alu Foil With Scrim With Kraft Paper
G Code Cnc Plasma Cutting Machine
Lens Prism Price
0 – Organic Resveratrol Bulk Powder
Electrical Distribution Box
Waterproof Materials
China Cheap Hospital Bed For Sale