端午节除了学习领导要求的蒙特卡洛和VAR建模分析,闲暇时间做了一个小项目,记录在博客上。

5月29日,备受关注的季中邀请赛在韩国釜山图书馆结束,代表LPL出战的RNG3比2战胜了韩国的T1,看的那叫一个扬眉吐气,今天做个小项目,爬取下B站比赛视频,看下网友都咋说,然后做个简单的分析。

0. 导包

## 各个包功能不再赘述,注意后文的高频词汇分析时用jieba.analyse
import re
import requests
from bs4 import BeautifulSoup as Bs
import time
import os
import wordcloud
import jieba
import jieba.analyse
import pandas as pd
import numpy as np
import matplotlib.pyplot

1. 关于B站弹幕获取

1.1 获取弹幕的cid号

首先说明下B站的弹幕情况:
B站每一个视频都有一个专属的网址与弹幕区,可以用来当作每个视频的“身份证
需要找到B站的弹幕接口,一般为http://comment.bilibili.com/“cid”.xml,而这个cid可以看作是视频弹幕的身份证号(注意,这里爬取的弹幕数量是有限的,不是全量)
所以我们需要获取下比赛视频的cid号:

这里有两种方法:
1、PC端找到比赛视频网址:https://www.bilibili.com/video/BV1B54y1o72S,「分享」-「嵌入代码」-复制,然后粘贴出来:
RNG的决赛视频分享时嵌入代码为:
“”

这里我们可以看到cid=732953378,我们需要的是这串数字。

2、爬虫获取,这里直接上代码。

url = 'https://www.bilibili.com/video/BV1B54y1o72S'
r1 = requests.get(url=url)
html1 = r1.text
cid = re.findall('cid=(.*?)&aid=',html1)[0]
cid

得到结果:‘732953378’,和第一种方法相同。

1.2 获取弹幕信息

直接上代码,说明在注释中进行解释。

bullet_url = 'http://comment.bilibili.com/{}.xml'.format(cid) #弹幕地址
print('弹幕地址是:',bullet_url)
r2 = requests.get(url=bullet_url)
r2.encoding='utf-8' #如果爬取结果中文部分是乱码,通过此代码调整
html2 = r2.textsoup = Bs(html2,'xml') #解析html2
bullet_list = soup.find_all('d')
bullet_list
len(bullet_list)
# 结果发现有1800条弹幕,相比网站下方“装填3000条弹幕”可见爬取的只是一部分
## 解析好的弹幕数据包括弹幕时间,弹幕内容,后续我们可以对这两项内容进行拆解分析
### 对于解析xml页面,<d>标签的文本内容文弹幕,<d>标签内p属性值的第四个字符值是时间戳
video_url_list = [] #准备好空列表
bullet_url_list = []
time_list = []
text_list = []
for dm in bullet_list:data_split = dm['p'].split(',')temp_time = time.localtime(int(data_split[4])) #转换时间格式bullet_time = time.strftime("%Y-%m-%d %H:%M:%S",temp_time)video_url_list.append(url)bullet_url_list.append(bullet_url)time_list.append(bullet_time)text_list.append(dm.text)print('{}:{}'.format(bullet_time,dm.text))

2. 情感分析

这里用snownlp库去进行情感解析及分析

dic = {'弹幕时间':time_list,'弹幕内容':text_list}
df = pd.DataFrame(dic) #将爬取的弹幕组程dataframe
from snownlp import SnowNLP
v_cmt_list = text_list
# 准备初始数据
tag_list = []
score_list =[]
neg_count = 0
pos_count = 0
mid_count = 0# 情感判定
for comment in v_cmt_list:tag = ''sentiments_score = SnowNLP(comment).sentimentsif sentiments_score < 0.5:tag = '消极'neg_count += 1elif sentiments_score > 0.5:tag = '积极'pos_count += 1else:tag = '中性'mid_count += 1score_list.append(sentiments_score) #得分值tag_list.append(tag)
# 把得分和结果加到df中
df['情感得分'] = score_list
df['分析结果'] = tag_list

结果:

当然,这里的snownlp没有训练过的,有些表达存在差异。

# 对结果进行展示
show= df['分析结果'].value_counts()
print('正负面评论统计:')
print(show)

## 做个饼图看下
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
grp.plot.pie(y='分析结果',autopct='%2f%%')

3. 关键词获取

这里用jieba.analyse 对分析结果的高频词汇进行统计

v_cmt_str = ''.join(v_cmt_list) #把列表中所有字符进行合并
print(v_cmt_str)
keywords_top10 = jieba.analyse.extract_tags(v_cmt_str,withFlag=True,topK=10)
print('top10关键词及权重:') #这里我的结果没有显示权重= =
print(keywords_top10)

结果
也比较符合我们对这场比赛的认知。

4. 生成词云图

# 由于词云是针对英文单词块的,这里先用jieba分下词
ls = jieba.lcut(v_cmt_str)
text = ' '.join(ls)
print(text)
# 首先对一些常见的中断词进行定义
stopwords =  ['的','啊','是','了','你','我','都','也','不','在','吧','说','就是','这','有']
wc = wordcloud.WordCloud(font_path="msyh.ttc",width = 1000,height = 700,background_color='white',max_words=100,stopwords=stopwords)
# msyh.ttc电脑本地字体,写可以写成绝对路径
wc.generate(text) # 加载词云文本
wc.to_file("Rng.png") # 保存词云文件

词云结果——哈哈,也比较符合认知。

RNG牛逼,是时候放出17年世界赛的应援物了。17年现场目睹RNG与SKT血战五局,五年之后,时移势迁,这也是我在上海的第五年,尘归尘,土归土,愿诸事顺遂。

小项目-弹幕数据分析+词云展示相关推荐

  1. [弹幕词云姬]硬核b站up主一周撸出来的小工具,根据b站弹幕生成词云(一)

    过去一周突然有个很不错的想法,想用b站的弹幕来生成一个词云的效果.于是辛苦奋战一周,大概花了十个小时左右,整出了这个全新的小工具--<词云弹幕姬>访问地址http://danmu.xiez ...

  2. 爬虫项目五:最详细的京东商品、评价爬虫、词云展示

    文章目录 前言 一.京东商品信息爬虫 1.分析URL 2.实例化chrome 3.加载完整数据 4.实现翻页 5.解析数据 二.京东商品评价爬虫 1.找到接口 2.分析url 3.解析数据 4.词云 ...

  3. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

  4. Day10.如何给⽑不易的歌曲做词云展示

    Python词云 今天我们做⼀个数据可视化的项⽬. 我们经常需要对分析的数据提取常⽤词,做词云展示.⽐如⼀些互联⽹公司会抓取⽤户的画像,或者每⽇讨论话题的关键词,形成词云并进⾏展示. 或者你喜欢某个歌 ...

  5. 实战小项目 | Python制作词云跳舞,刘畊宏男孩女孩看过来~

    大家好,我是王某人 最近刘教练真的很火,带领全民健身,很多人成为了刘教练的男孩.女孩! 本文是一个非常完整的Python实战项目,从一个刘教练的健身视频出发,最终生成了一个基于B站用户弹幕的词云舞视频 ...

  6. 文本分析4-词频统计与词云展示

    笔记来自课程:玩转文本挖掘(51ct0学院),总结整理为个人学习.复习使用,供参考. 对小说第一章进行分词 首先重复之前的操作,读文本数据–章节标识–选取第一章–分词 读取并选取第一章 import ...

  7. scrapy爬虫之抓取《芳华》短评及词云展示

    简介 在scrapy爬虫之<琅琊榜2>话题title收集及词云展示 及scrapy爬虫之模拟登录豆瓣l 两篇博文中,我们分别实现了直接爬取内容及模拟登陆豆瓣,现在我们将这两个功能整合到一起 ...

  8. python的总结与心得词云设计理念_Python词云展示十九大报告

    "不忘初心,牢记使命,高举中国特色社会主义伟大旗帜,决胜全面建成小康社会,夺取新时代中国特色社会主义伟大胜利,为实现中华民族伟大复兴的中国梦不懈奋斗." 十九大召开已过去近一个月, ...

  9. python词云展示库——Wordcloud的安装

    Wordcloud的介绍 大家好,若有技术问题请留言或关注[氢立方]这个id,这个id 密码忘记了. Wordcloud库是python优秀的词云展示第三方库.下面我就给大家介绍下的安装方法: 小编电 ...

最新文章

  1. SpringBoot+WebSocket实时监控异常
  2. MyBatis 框架系列之基础初识
  3. python 树_Python树的概念
  4. 初探Tomcat的架构设计
  5. Hibernate学习笔记--核心编程
  6. 技术系统进化法则是_()是技术系统所有进化法则的基础。
  7. 如何在WPF中调用Winform控件
  8. 让Tee 7.x版本和FastReport 3.x版本共存
  9. avue中怎样隐藏新增和编辑的按钮
  10. LeetCode —— 332. 重新安排行程(Python)
  11. 组态王opc_组态王和西门子S7300、S7400系列PLC通讯的几种配置方案
  12. UML建模工具Visio、Rational Rose、PowerDesign,Visual Paradigm for UML
  13. html/css静态网页制作
  14. (9.19更新:八戒退款) 砸进七万块,没想到你是这样的猪八戒网
  15. 魔王语言解释器C语言,[数据结构]魔王语言解释c语言实现
  16. 【转】常见的逻辑谬误
  17. 转载 一堂价值39万元的课,把她看完,你一定会有所获!
  18. 简单分析RTMP规范
  19. OpenGLES 3.0
  20. 血条加载!百度地图上线复苏指数;Quora推出问答机器人;腾讯绝悟成功用于医疗诊断;使用chatGPT生成推文;GitHub AI项目精选 | ShowMeAI资讯日报

热门文章

  1. 10.区块链系列之hardhat部署抵押赎回Fund合约
  2. md5 长度 linux2.4,md5
  3. 数据类型(一)基本的数据类型
  4. 【PCB干货】是开窗还是盖油?想搞懂过孔工艺,看这篇就够了!
  5. 五款轻量型bug管理工具横向测评
  6. 新版标准日本语中级_第二十二课
  7. C++编程练习-员工上下班
  8. 开发自主芯片,原来没有国产手机四强说的那么难
  9. oracle12c 1,oracle12c,各种问题解决方案 1
  10. 实战丨Halo-轻松部署属于自己的博客系统