【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩”阳了”的评论

一、背景介绍

您好,我是@马哥python说,一枚10年程序猿。

以前大家见面都问"吃了没",最近大家见面都问"阳了没",奈何疫情反反复复,惟愿身体安康!

我用python抓取了B站上千条评论,并进行可视化舆情分析,下面详细讲解代码。

二、爬虫代码

2.1 展示爬取结果

首先,看下部分爬取数据:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

爬取字段含:视频链接、评论页码、评论作者、评论时间、IP属地、点赞数、评论内容

2.2 爬虫代码讲解

导入需要用到的库:

import requests  # 发送请求
import pandas as pd  # 保存csv文件
import os  # 判断文件是否存在
import time
from time import sleep  # 设置等待,防止反爬
import random  # 生成随机数

定义一个请求头:

# 请求头
headers = {
    'authority': 'api.bilibili.com',
    'accept': 'application/json, text/plain, */*',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    # 需定期更换cookie,否则location爬不到
    'cookie': "需换成自己的cookie值",
    'origin': 'https://www.bilibili.com',
    'referer': 'https://www.bilibili.com/video/BV1FG4y1Z7po/?spm_id_from=333.337.search-card.all.click&vd_source=69a50ad969074af9e79ad13b34b1a548',
    'sec-ch-ua': '"Chromium";v="106", "Microsoft Edge";v="106", "Not;A=Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-site',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47'
}

请求头中的cookie是个很关键的参数,如果不设置cookie,会导致数据残缺或无法爬取到数据。

那么cookie如何获取呢?打开开发者模式,见下图:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

由于评论时间是个十位数:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

所以开发一个函数用于转换时间格式:

def trans_date(v_timestamp):
    """10位时间戳转换为时间字符串"""
    timeArray = time.localtime(v_timestamp)
    otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    return otherStyleTime

向B站发送请求:

response = requests.get(url, headers=headers, )  # 发送请求

接收到返回数据了,怎么解析数据呢?看一下json数据结构:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

0-19个评论,都存放在replies下面,replies又在data下面,所以,这样解析数据:

data_list = response.json()['data']['replies']  # 解析评论数据

这样,data_list里面就是存储的每条评论数据了。

接下来吗,就是解析出每条评论里的各个字段了。

我们以评论内容这个字段为例:

comment_list = []  # 评论内容空列表
# 循环爬取每一条评论数据
for a in data_list:
    # 评论内容
    comment = a['content']['message']
    comment_list.append(comment)

其他字段同理,不再赘述。

最后,把这些列表数据保存到DataFrame里面,再to_csv保存到csv文件,持久化存储完成:

# 把列表拼装为DataFrame数据
df = pd.DataFrame({
    '视频链接': 'https://www.bilibili.com/video/' + v_bid,
    '评论页码': (i + 1),
    '评论作者': user_list,
    '评论时间': time_list,
    'IP属地': location_list,
    '点赞数': like_list,
    '评论内容': comment_list,
})
# 把评论数据保存到csv文件
df.to_csv(outfile, mode='a+', encoding='utf_8_sig', index=False, header=header)

注意,加上encoding='utf_8_sig',否则可能会产生乱码问题!

下面,是主函数循环爬取部分代码:(支持多个视频的循环爬取)

# 随便找了几个"世界杯"相关的视频ID
bid_list = ['BV1DP411g7jx', 'BV1M24y117K3', 'BV1nt4y1N7Kj']
# 评论最大爬取页(每页20条评论)
max_page = 30
# 循环爬取这几个视频的评论
for bid in bid_list:
    # 输出文件名
    outfile = 'b站评论_{}.csv'.format(now)
    # 转换aid
    aid = bv2av(bid=bid)
    # 爬取评论
    get_comment(v_aid=aid, v_bid=bid)

三、可视化代码

为了方便看效果,以下代码采用jupyter notebook进行演示。

3.1 读取数据

用read_csv读取刚才爬取的B站评论数据:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

查看前3行及数据形状:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

3.2 数据清洗

处理空值及重复值:
【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论

3.3 可视化

3.3.1 IP属地分析-柱形图

柱形图

可得结论:关于"阳了"这个话题,评论里关注度最高为广东、北京、江苏等地区,其中,广东省的关注度最高。同时,我们注意到,也包含一些海外网友的少量评论。

3.3.2 评论时间分析-折线图

分析出评论时间的分布情况:
折线图

可得结论:关于"阳了"这个话题,再抓取到的数据范围内,12.18日的评论数据量最大,达到了将近900的数量峰值。

3.3.3 点赞数分布-直方图

由于点赞数大部分为0或个位数情况,个别点赞数到达成千上万,直方图展示效果不佳,因此,仅提取点赞数<30的数据绘制直方图。
直方图

可得结论:从直方图的分布来看,点赞数在0-3个的评论占据大多数,很少点赞数达到了上千上万的情况。证明网友对"阳了"事件的态度分布比较均匀,没有出现态度非常聚集的评论内容。

3.3.4 评论内容-情感分布饼图

针对中文评论数据,采用snownlp开发情感判定函数:
情感判定函数

情感分布饼图,如下:
饼图

可得结论:关于"阳了"这个话题,积极评价与消极评价占比差不多,积极评价稍高一点,反应出网友对感染阳性的态度反差很大,大约各占一半。

3.3.5 评论内容-词云图

初始化停用词和词云图对象:
wordcloud对象

jieba分词之后,对分词后数据进行绘制词云图:
词云图

可得结论:在词云图中,阳、感染、发烧、症状、疼、嗓子等词汇较大,出现频率较高,反应出众多网友对确诊阳性后描述病症、积极探讨病情的现状。

三、演示视频

代码演示视频:
https://www.zhihu.com/zvideo/1590645358123839488

四、附完整源码

完整源码:【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论


by 马哥python说

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩”阳了”的评论 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 【Python爬虫案例】用python爬1000条哔哩哔哩搜索结果

    目录 一、爬取目标 二、讲解代码 三、同步讲解视频 四、完整源码 一、爬取目标 大家好,我是 @马哥python说 ,一名10年程序猿。 今天分享一期爬虫的案例,用python爬哔哩哔哩的搜索结果,也就是这个页面: 爬取字段,包含:页码, 视频标题, 视频作者, 视频编号, 创建时间, 视频时长, 弹幕数, 点赞数, 播放数, 收藏数, 分区类型, 标签, …

    2023年4月2日
    00
  • 【Python数据分析案例】python数据分析老番茄B站数据(pandas常用基础数据分析代码)

    目录 一、爬取老番茄B站数据 二、python数据分析 1、读取数据源 2、查看数据概况 3、查看异常值 4.1、查看最大值(max函数) 4.2、查看最小值(min函数) 5.1、查看TOP3的视频(nlargest函数) 5.2、查看倒数3的视频(nsmallest函数) 6、查看相关性 7.1、可视化分析-plot 7.2、可视化分析-pyechart…

    2023年4月2日
    00
  • 【拖拽可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!

    目录 一、设计方案 二、项目背景 三、电影爬虫 3.1 导入库 3.2 发送请求 3.3 解析页面 3.4 存储到csv 3.5 讲解视频 四、数据持久化存储 4.1 导入库 4.2 存入MySQL 4.3 讲解视频 五、开发可视化大屏 5.1 柱形图 5.2 饼图 5.3 词云图 5.4 数据表格 5.5 涟漪散点图 5.6 条形图 5.7 大标题 5.8…

    2023年4月2日
    00
  • 【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩”狂飙”的评论

    目录 一、背景介绍 二、爬虫代码 2.1 展示爬取结果 2.2 爬虫代码讲解 三、可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间分析-折线图 3.3.3 点赞数分布-直方图 3.3.4 评论内容-情感分布饼图 3.3.5 评论内容-词云图 四、演示视频 五、附完整源码 一、背景介绍 您好…

    2023年3月31日
    00
  • 【可视化大屏教程】用Python开发智慧城市数据分析大屏!

    目录 一、开发背景 二、讲解代码 2.1 大标题+背景图 2.2 各区县交通事故统计图-系列柱形图 2.3 图书馆建设率-水球图 2.4 当年城市空气质量aqi指数-面积图 2.5 近7年人均生产总值变化图-面积图 2.6 城市人才占比结构图-柱形图 2.7 城市宣传片视频-大屏左上角位置 2.8 组合以上图表,生成临时大屏 2.9 生成最终大屏 2.10 …

    2023年4月2日
    00
  • 【GUI开发】用python爬YouTube博主信息,并开发成exe软件!

    目录 一、背景介绍 二、代码讲解 2.1 爬虫 2.2 tkinter界面 2.3 存日志 三、说明 一、背景介绍 你好,我是@马哥python说,一名10年程序猿。 最近我用python开发了一个GUI桌面软件,目的是爬取相关YouTube博主的各种信息,字段包括: 视频标题、视频链接、博主名称、博主链接、国家、telegram链接、whatsapp链接、…

    2023年4月2日
    00
  • 【技术流吃瓜】python可视化大屏舆情分析“张天爱“事件微博评论

    目录 一、事件背景 二、微热点分析 二、自开发Python舆情分析 2.1 Python爬虫 2.2 可视化大屏 2.2.1 大标题 2.2.2 词云图 2.2.3 条形图 2.2.4 饼图(玫瑰图) 2.2.5 地图 三、演示视频 四、完整源码 一、事件背景 大家好,我是马哥python说,一枚10年程序猿。 演员张天爱于2022.8.25号在网上爆出一段…

    2023年4月2日
    00
  • 【NLP教程】用python调用百度AI开放平台进行情感倾向分析

    目录 一、背景 二、操作步骤 2.1 创建应用 2.2 获取token 2.3 情感倾向分析 三、其他情感分析 四、讲解视频 一、背景 Hi,大家!我是 @马哥python说 ,一名10年程序猿。 今天我来演示一下:通过百度AI开放平台,利用python调用百度接口进行中文情感倾向分析,并得出情感极性分为积极、消极还是中性以及置信度结果。 二、操作步骤 首先…

    python 2023年4月25日
    00
合作推广
合作推广
分享本页
返回顶部