您好,登录后才能下订单哦!
Python如何爬取腾讯视频跑男的评论并做简单文本的可视化分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
「《奔跑吧》第五季」已经播出两期了,节目以“黄河生态经济带”沿线地区为依托,通过创新游戏设置、直播带货扶贫等新形式,展现黄河流域的重要地位,描绘黄河生态经济带城市“文化之美”。
然而,网友貌似并不买账,邓超、郑凯等退出跑男后,「收视明显不如以前」,而吐槽貌似有所增加。为了了解吃瓜群众们对于跑男的看法,我爬了爬腾讯视频关于跑男的评论,并做了简单文本「可视化分析」。
腾讯视频评论要点击「查看更多评论」才能加载更多数据,很明显是一个动态网页,评论内容使用了「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 jieba import re import numpy as np import 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 11833 Data 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 + i while st[k:k+i] == st[k+i:k+2*i] and k<len(st): k = k + i st = st[:j] + st[k:] return st yasuo(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如何爬取腾讯视频跑男的评论并做简单文本的可视化分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。