前言
大家好,我是J哥。
综艺,是我们劳累了一天的放松方式,也是我们饭后的谈资。看着自己喜欢的综艺,时光足够美。而《令人心动的offer 》,就是一个不错的综艺选择。有人说它让自己更自卑了,而我觉得挺有意思。
《令人心动的offer 》目前为止已经播出了两季,第一季在豆瓣为8.3分,共有5万余人评分,第二季目前评分低于第一季,评分仅7.1分。
本文通过爬取《令人心动的offer》第二季13万+弹幕,进行可视化分析和情感分析,完整代码后台回复「offer」即可免费获取。
数据获取
《令人心动的offer》第二季在腾讯视频独家播出,目前已播出四期(含面试篇),本文采取分集爬取。弹幕数据爬虫在往期原创文章中已详细讲解,本文不做赘述,感兴趣的朋友可点击:视频弹幕爬虫,看这一篇就够了。以下以爬取面试篇弹幕为例,并给出完整代码:
#-*- coding = uft-8 -*-
#@Time : 2020/11/30 21:35
#@Author : 公众号 菜J学Python
#@File : tengxun_danmu.py
import requests
import json
import time
import pandas as pd
target_id = "6130942571%26" #面试篇的target_id
vid = "%3Dt0034o74jpr" #面试篇的vid
df = pd.DataFrame()
for page in range(15, 3214, 30): #视频时长共3214秒
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
url = 'https://mfm.video.qq.com/danmu?otype=json×tamp={0}&target_id={1}vid{2}&count=80'.format(page,target_id,vid)
print("正在提取第" + str(page) + "页")
html = requests.get(url,headers = headers)
bs = json.loads(html.text,strict = False) #strict参数解决部分内容json格式解析报错
time.sleep(1)
#遍历获取目标字段
for i in bs['comments']:
content = i['content'] #弹幕
upcount = i['upcount'] #点赞数
user_degree =i['uservip_degree'] #会员等级
timepoint = i['timepoint'] #发布时间
comment_id = i['commentid'] #弹幕id
cache = pd.DataFrame({
'弹幕':[content],'会员等级':[user_degree],'发布时间':[timepoint],'弹幕点赞':[upcount],'弹幕id':[comment_id]})
df = pd.concat([df,cache])
df.to_csv('面试篇.csv',encoding = 'utf-8')
分别爬取完成后,将四个弹幕csv文件放入一个文件夹中。
打开面试篇csv文件,预览如下:
数据清洗
合并弹幕数据
首先,将四个弹幕csv文件进行数据合并,采用concat方法。
import pandas as pd
import numpy as np
df1 = pd.read_csv("/菜J学Python/弹幕/腾讯/令人心动的offer/面试篇.csv")
df1["期数"] = "面试篇"
df2 = pd.read_csv("/菜J学Python/弹幕/腾讯/令人心动的offer/第1期.csv")
df2["期数"] = "第1期"
df3 = pd.read_csv("/菜J学Python/弹幕/腾讯/令人心动的offer/第2期.csv")
df3["期数"] = "第2期"
df4 = pd.read_csv("/菜J学Python/弹幕/腾讯/令人心动的offer/第3期.csv")
df4["期数"] = "第3期"
df = pd.concat([df1,df2,df3,df4])
预览下合并后的数据:
df.sample(10)
查看数据信息
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 133627 entries, 0 to 34923
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ --