Python爬取腾讯视频跑男的评论,并做了简单文本可视化分析[Python基础]
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
以下文章来源于菜J学Python,作者: J哥
Python爬取爬取腾讯视频弹幕视频讲解
https://www.bilibili.com/video/BV1954y1r7pi/
前言
「《奔跑吧》第五季」已经播出两期了,节目以“黄河生态经济带”沿线地区为依托,通过创新游戏设置、直播带货扶贫等新形式,展现黄河流域的重要地位,描绘黄河生态经济带城市“文化之美”。
然而,网友貌似并不买账,邓超、郑凯等退出跑男后,「收视明显不如以前」,而吐槽貌似有所增加。为了了解吃瓜群众们对于跑男的看法,我爬了爬腾讯视频关于跑男的评论,并做了简单文本「可视化分析」。
数据获取
腾讯视频评论要点击「查看更多评论」才能加载更多数据,很明显是一个动态网页,评论内容使用了「Ajax动态加载技术」。因此,我们需要找到「真实URL」,然后再请求数据。通过真实URL获取到cursor=?和_=?这两个参数即可。核心代码如下:
def main():#初始页面的_=?page=1607948139253
#初始待刷新页面的cursor=?
lastId="0"
for i in range(1,1000):
time.sleep(1)
html = get_content(page,lastId)
#获取评论数据
commentlist=get_comment(html)
print("------第"+str(i)+"轮页面评论------")
k = 0
for j in range(1,len(commentlist)):
comment = commentlist[j]
k += 1
print("第%s条评论:%s"%(k,comment))
#获取下一轮刷新页ID
lastId=get_lastId(html)
page += 1
if__name__ == "__main__":
main()
数据处理
导入相关包
import jiebaimport reimport numpy as npimport pandas as pd import matplotlib.pyplot as plt from pyecharts.charts import *from pyecharts import options as opts
from pyecharts.globals import ThemeType
import stylecloud
from IPython.display import Image
导入评论数据
分别爬取了两期评论,因此需要分别读取并合并所有数据。
df1 = pd.read_csv("/腾讯评论/paonan.csv",names=["评论内容"])df2
= pd.read_csv("/腾讯评论/paonan1.csv",names=["评论内容"])df
= pd.concat([df1,df2])df.head(
10)
数据预览
查看数据信息
print("共有评论数:",df.shape[0],"条")
共有评论数:21307 条
df.info()df[
"评论内容"] = df["评论内容"].astype("str")<class"pandas.core.frame.DataFrame">Int64Index:
21307 entries, 0 to 11833Data columns (total
1 columns):# Column Non-Null Count Dtype--- ------ -------------- -----
0 评论内容 21199 non-null object
dtypes: object(1)
memory usage: 332.9+ KB
删除重复评论
df = df.drop_duplicates()
删除缺失数据
df = df.dropna()
增加评论类型
人为划分评论类型,20字以下为短评,20-50字为中评,50字以上为长评。
cut = lambda x : "短评"if len(x) <= 20else ("中评"if len(x) <=50else"长评")df[
"评论类型"] = df["评论内容"].map(cut)
提取演员关键词
根据评论内容关键词,提取出人物提及字段。
tmp=[]for i in df["评论内容"]:if"黑牛"in i:tmp.append(
"李晨")elif"杨颖"in i:tmp.append(
"杨颖")elif"沙溢"in i:tmp.append(
"沙溢")elif"坤"in i:tmp.append(
"蔡徐坤")elif"毅"in i:tmp.append(
"成毅")elif"一桐"in i:tmp.append(
"李一桐") else:tmp.append(
"其他")df[
"人物提及"] = tmp
机械压缩去重
定义一个机械压缩函数:
def yasuo(st):for i in range(1,int(len(st)/2)+1):for j in range(len(st)):if st[j:j+i] == st[j+i:j+2*i]:k
= j + iwhile st[k:k+i] == st[k+i:k+2*i] and k<len(st):k
= k + ist
= st[:j] + st[k:] return styasuo(st
="123")
调用函数,对评论内容进行机械压缩去重:
df["评论内容"] = df["评论内容"].apply(yasuo)
特殊字符处理
用正则表达式提取出中文:
df["评论内容"] = df["评论内容"].str.extract(r"([u4e00-u9fa5]+)")df
= df.dropna() #纯表情弹幕直接删除
过滤掉评论字数少于四个字的评论:
df = df[df["评论内容"].apply(len)>=4]df
= df.dropna()
数据可视化
整体评论情况
# 绘制词云图text1 = get_cut_words(content_series=df["评论内容"])
stylecloud.gen_stylecloud(text="".join(text1), max_words=1000,
collocations=False,
font_path="演示悠然小楷.ttf",
icon_name="fas fa-video",
size=653,
#palette="matplotlib.Inferno_9",
output_name="./评论.png")
Image(filename="./评论.png")
通过对所有评论进行词云图绘制,我们发现「成毅」提及最多,对于最新跑男的看法,大家表现出非一致的看法。有人说「好看、喜欢」,有人说「没意思」。另外,评论中还多次提到往期节目中的嘉宾,如「陈赫、郑凯、郭麒麟」等,没有比较就没有伤害,很多人还是更喜欢往期的跑男的。
评论类型分布
df2 = df.groupby("评论类型")["评论内容"].count()df2
= df2.sort_values(ascending=False)regions
= df2.index.to_list()values
= df2.to_list()c
= (Pie(init_opts
=opts.InitOpts(theme=ThemeType.CHALK)).add(
"", zip(regions,values),radius=["40%", "70%"]).set_global_opts(title_opts
=opts.TitleOpts(title="评论类型占比",subtitle="数据来源:腾讯视频",pos_top="2%",pos_left = "center")).set_series_opts(label_opts
=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)))
c.render_notebook()
短评占据「81.99%」,仅有2.65%的观众给出了50字以上的评论。
演员角色提及
df8 = df["人物提及"].value_counts(ascending=True)[:6]print(df8.index.to_list())print(df8.to_list())c
= (Bar(init_opts
=opts.InitOpts(theme=ThemeType.CHALK)).add_xaxis(df8.index.to_list())
.add_yaxis(
"",df8.to_list()).reversal_axis().set_global_opts(title_opts
=opts.TitleOpts(title="人物提及次数",subtitle="数据来源:腾讯视频 ",pos_left = "top"),xaxis_opts
=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改横坐标字体大小yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改纵坐标字体大小
)
.set_series_opts(label_opts=opts.LabelOpts(font_size=16,position="right"))
)
c.render_notebook()
新成员「成毅」被观众提及次数最多,达到790次,其次是「蔡徐坤」,被提及452次。李晨被提及次数最少。
成毅评论词云
cy = df[df["人物提及"]=="成毅"]text
= get_cut_words(content_series=cy["评论内容"])stylecloud.gen_stylecloud(text
="".join(text), max_words=500,collocations
=False,font_path
="演示悠然小楷.ttf",icon_name
="fas fa-comments",#palette="matplotlib.Inferno_9",size=653,
output_name="./dinghui.png")
Image(filename="./dinghui.png")
成毅在新一季跑男的表现被网友广泛议论,认可他的观众「喜欢、期待、可爱」他的表现。也有相当多的观众觉得他「智商」有问题,是个「游戏黑洞」,而且很「搞笑」。
以上是 Python爬取腾讯视频跑男的评论,并做了简单文本可视化分析[Python基础] 的全部内容, 来源链接: utcz.com/z/530576.html