当前位置:   article > 正文

Python爬取腾讯视频跑男的评论,并做了简单文本可视化分析_腾讯视频评论爬虫

腾讯视频评论爬虫

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于菜J学Python,作者: J哥

 

Python爬取爬取腾讯视频弹幕视频讲解

https://www.bilibili.com/video/BV1954y1r7pi/

前言

「《奔跑吧》第五季」已经播出两期了,节目以“黄河生态经济带”沿线地区为依托,通过创新游戏设置、直播带货扶贫等新形式,展现黄河流域的重要地位,描绘黄河生态经济带城市“文化之美”。

然而,网友貌似并不买账,邓超、郑凯等退出跑男后,「收视明显不如以前」,而吐槽貌似有所增加。为了了解吃瓜群众们对于跑男的看法,我爬了爬腾讯视频关于跑男的评论,并做了简单文本「可视化分析」

数据获取

腾讯视频评论要点击「查看更多评论」才能加载更多数据,很明显是一个动态网页,评论内容使用了「Ajax动态加载技术」。因此,我们需要找到「真实URL」,然后再请求数据。通过真实URL获取到cursor=?和_=?这两个参数即可。核心代码如下:

  1. def main():
  2. #初始页面的_=?
  3. page=1607948139253
  4. #初始待刷新页面的cursor=
  5. lastId="0"
  6. for i in range(1,1000):
  7. time.sleep(1)
  8. html = get_content(page,lastId)
  9. #获取评论数据
  10. commentlist=get_comment(html)
  11. print("------第"+str(i)+"轮页面评论------")
  12. k = 0
  13. for j in range(1,len(commentlist)):
  14. comment = commentlist[j]
  15. k += 1
  16. print('第%s条评论:%s'%(k,comment))
  17. #获取下一轮刷新页ID
  18. lastId=get_lastId(html)
  19. page += 1
  20. if __name__ == '__main__':
  21. main()

数据处理

导入相关包

  1. import jieba
  2. import re
  3. import numpy as np
  4. import pandas as pd
  5. import matplotlib.pyplot as plt
  6. from pyecharts.charts import *
  7. from pyecharts import options as opts
  8. from pyecharts.globals import ThemeType
  9. import stylecloud
  10. from IPython.display import Image

导入评论数据

分别爬取了两期评论,因此需要分别读取并合并所有数据。

  1. df1 = pd.read_csv('/腾讯评论/paonan.csv',names=['评论内容'])
  2. df2 = pd.read_csv('/腾讯评论/paonan1.csv',names=['评论内容'])
  3. df = pd.concat([df1,df2])
  4. df.head(10)

 

数据预览

查看数据信息

print('共有评论数:',df.shape[0],'条')

共有评论数:21307 条

  1. df.info()
  2. df['评论内容'] = df['评论内容'].astype('str')
  1. <class 'pandas.core.frame.DataFrame'>
  2. Int64Index:21307 entries, 0 to 11833
  3. Data columns (total 1 columns):
  4. # Column Non-Null Count Dtype
  5. --- ------ -------------- -----
  6. 0 评论内容 21199 non-null object
  7. dtypes: object(1)
  8. memory usage: 332.9+ KB

删除重复评论

df = df.drop_duplicates()

删除缺失数据

df = df.dropna()

增加评论类型

人为划分评论类型,20字以下为短评,20-50字为中评,50字以上为长评。

  1. cut = lambda x : '短评'if len(x) <= 20else ('中评'if len(x) <=50else'长评')
  2. df['评论类型'] = df['评论内容'].map(cut)

提取演员关键词

根据评论内容关键词,提取出人物提及字段。

  1. tmp=[]
  2. for i in df["评论内容"]:
  3. if"黑牛"in i:
  4. tmp.append("李晨")
  5. elif"杨颖"in i:
  6. tmp.append("杨颖")
  7. elif"沙溢"in i:
  8. tmp.append("沙溢")
  9. elif"坤"in i:
  10. tmp.append("蔡徐坤")
  11. elif"毅"in i:
  12. tmp.append("成毅")
  13. elif"一桐"in i:
  14. tmp.append("李一桐")
  15. else:
  16. tmp.append("其他")
  17. df['人物提及'] = tmp

机械压缩去重

定义一个机械压缩函数:

  1. def yasuo(st):
  2. for i in range(1,int(len(st)/2)+1):
  3. for j in range(len(st)):
  4. if st[j:j+i] == st[j+i:j+2*i]:
  5. k = j + i
  6. while st[k:k+i] == st[k+i:k+2*i] and k<len(st):
  7. k = k + i
  8. st = st[:j] + st[k:]
  9. return st
  10. yasuo(st="123")

调用函数,对评论内容进行机械压缩去重:

df["评论内容"] = df["评论内容"].apply(yasuo)

特殊字符处理

用正则表达式提取出中文:

  1. df['评论内容'] = df['评论内容'].str.extract(r"([\u4e00-\u9fa5]+)")
  2. df = df.dropna() #纯表情弹幕直接删除

过滤掉评论字数少于四个字的评论:

  1. df = df[df["评论内容"].apply(len)>=4]
  2. df = df.dropna()

数据可视化

整体评论情况

  1. # 绘制词云图
  2. text1 = get_cut_words(content_series=df['评论内容'])
  3. stylecloud.gen_stylecloud(text=' '.join(text1), max_words=1000,
  4. collocations=False,
  5. font_path='演示悠然小楷.ttf',
  6. icon_name='fas fa-video',
  7. size=653,
  8. #palette='matplotlib.Inferno_9',
  9. output_name='./评论.png')
  10. Image(filename='./评论.png')

 

通过对所有评论进行词云图绘制,我们发现「成毅」提及最多,对于最新跑男的看法,大家表现出非一致的看法。有人说「好看、喜欢」,有人说「没意思」。另外,评论中还多次提到往期节目中的嘉宾,如「陈赫、郑凯、郭麒麟」等,没有比较就没有伤害,很多人还是更喜欢往期的跑男的。

评论类型分布

  1. df2 = df.groupby('评论类型')['评论内容'].count()
  2. df2 = df2.sort_values(ascending=False)
  3. regions = df2.index.to_list()
  4. values = df2.to_list()
  5. c = (
  6. Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
  7. .add("", zip(regions,values),radius=["40%", "70%"])
  8. .set_global_opts(title_opts=opts.TitleOpts(title="评论类型占比",subtitle="数据来源:腾讯视频",pos_top="2%",pos_left = 'center'))
  9. .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18))
  10. )
  11. c.render_notebook()

 

短评占据「81.99%」,仅有2.65%的观众给出了50字以上的评论。

演员角色提及

  1. df8 = df["人物提及"].value_counts(ascending=True)[:6]
  2. print(df8.index.to_list())
  3. print(df8.to_list())
  4. c = (
  5. Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
  6. .add_xaxis(df8.index.to_list())
  7. .add_yaxis("",df8.to_list()).reversal_axis()
  8. .set_global_opts(title_opts=opts.TitleOpts(title="人物提及次数",subtitle="数据来源:腾讯视频 ",pos_left = 'top'),
  9. xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改横坐标字体大小
  10. yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改纵坐标字体大小
  11. )
  12. .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right'))
  13. )
  14. c.render_notebook()

 

新成员「成毅」被观众提及次数最多,达到790次,其次是「蔡徐坤」,被提及452次。李晨被提及次数最少。

成毅评论词云

  1. cy = df[df["人物提及"]=="成毅"]
  2. text = get_cut_words(content_series=cy['评论内容'])
  3. stylecloud.gen_stylecloud(text=' '.join(text), max_words=500,
  4. collocations=False,
  5. font_path='演示悠然小楷.ttf',
  6. icon_name='fas fa-comments',
  7. #palette='matplotlib.Inferno_9',
  8. size=653,
  9. output_name='./dinghui.png')
  10. Image(filename='./dinghui.png')

 

成毅在新一季跑男的表现被网友广泛议论,认可他的观众「喜欢、期待、可爱」他的表现。也有相当多的观众觉得他「智商」有问题,是个「游戏黑洞」,而且很「搞笑」

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/531697
推荐阅读
相关标签
  

闽ICP备14008679号