我们用Python分析了B站4万条数据评论,揭秘本山大叔《念诗之王》大热原因!...

本文主要是介绍我们用Python分析了B站4万条数据评论,揭秘本山大叔《念诗之王》大热原因!...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=png

来源:恋习Python

本文约2000字,建议阅读10分钟。

我们通过Python大法通过获取B站:【春晚鬼畜】赵本山:我就是念诗之王!4万条数据评论,与大家一起看看其背后火起来的原因。


640?wx_fmt=png


1990年本山老师首次登上中央电视台春节联欢晚会舞台,在春晚舞台给我们留下很多深入人心的作品如《相亲》,《我想有个家》,《昨天今天明天》,到2011年最后一次在春晚舞台表演小品,,22个年头陪我们度过了21个大年夜,每次都期待大叔的压轴出场伴随着零点的钟声一起跨年。


640?wx_fmt=jpeg


20年里本山老师的影响力是毋庸置疑的,但是小平不是单口相声更不是独角戏,他的成功也是离不开搭档的配合,大家最熟悉的搭档应该是范伟何高秀敏。三个人作为黄金搭档也是演绎了许多经典作品比如《卖拐》,《买车》,《功夫》等。


640?wx_fmt=jpeg


除了范伟和高秀敏,最令人印象深刻的搭档就是宋丹丹了,虽然合作的不是特别多但是二人合作的《昨天今天明天》和《小崔说事》太深入人心,白云黑土成了大家最喜爱的大叔大妈但宋丹丹多次说过上春晚太累,短期应该不会在合作了吧。


640?wx_fmt=jpeg


最近你有没有被“改革春风吹满地, 中国人民真争气”魔性的旋律所洗脑?这段视频一经发布,就迅速攻占“快手”“抖音”等各大短视频平台,近日临近春节,仿佛又开始爆发,俨然已经从2018年末火到了2019年初。



恐怕连赵本山本人也不敢相信,自己这么多年演的小品,被人剪辑改变成鬼畜神曲《念诗之王》后,这些经典台词焕发了第二春。《念诗之王》在B站播放量高达2400万,本山大叔,即便已经七八年没上春晚了,依然是毋庸置疑的高人气IP!


接下来,我们通过Python大法通过获取B站:【春晚鬼畜】赵本山:我就是念诗之王!(https://www.bilibili.com/video/av19390801/)4万条数据评论,与大家一起看看其背后火起来的原因。


一、数据获取


在获取视频评论之前,我们首要做的就是分析其网页结构,寻找目标数据(也就是我们要的评论数据在哪里,这点很重要)


640?wx_fmt=png


640?wx_fmt=png


最终发现,目标数据的url链接为:

https://api.bilibili.com/x/v2/reply?&type=1&oid=19390801&pn=1


由上图可看出,其评论数据是以json数据形式存在于网页端的,可看出一共有1946页评论,每页评论20条,总评论63579条(楼层下面存在评论)。今天我们与大家一起主要是爬取楼层评论,共1940*20=38920条。


接下来,就爬取思路很明确,从一个JSON文件开始,爬完20条评论,更改路径后获取第二个JSON文件,以此类推,直到爬完所有的评论数据。


我们主要爬取的数据信息有8个维度,如下:


640?wx_fmt=jpeg


详细代码:


import requests
from fake_useragent import UserAgent
import json
import time
import pandas as pd

#下载网页评论数据
def get_page_json(url):
    try:
        ua = UserAgent(verify_ssl=False)
        headers = {"User-Agent": ua.random}
        json_comment = requests.get(url,headers=headers).text
        return json_comment
    except:
        return None

#解析网页评论数据
def parse_page_json(json_comment):
   try:
       comments = json.loads(json_comment)
   except:
       return "error"

   comments_list = []
   #获取当页数据有多少条评论(一般情况下为20条)
   num = len(comments['data']['replies'])

   for i in range(num):
       comment = comments['data']['replies'][i]
       comment_list = []
       floor = comment['floor']
       ctime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(comment['ctime']))#时间转换
       likes = comment['like']
       author = comment['member']['uname']
       sex = comment['member']['sex']
       level = comment['member']['level_info']['current_level']
       content = comment['content']['message'].replace('\n','')#将评论内容中的换行符去掉
       #print(content)
       rcount = comment['rcount']
       comment_list.append(floor)
       comment_list.append(ctime)
       comment_list.append(likes)
       comment_list.append(author)
       comment_list.append(sex)
       comment_list.append(level)
       comment_list.append(content)
       comment_list.append(rcount)

       comments_list.append(comment_list)

   save_to_csv(comments_list)


def save_to_csv(comments_list):
    data = pd.DataFrame(comments_list)
    #注意存储文件的编码为utf_8_sig,不然会乱码,后期会单独深入讲讲为何为这样(如果为utf-8)
    data.to_csv('春晚鬼畜_1.csv', mode='a', index=False, sep=',', header=False,encoding='utf_8_sig')


def main():
    base_url = "https://api.bilibili.com/x/v2/reply?&type=1&oid=19390801&pn=1"
    #通过首页获取评论总页数
    pages = int(json.loads(get_page_json(base_url))['data']['page']['count'])//20
    for page in range(pages):
        url = "https://api.bilibili.com/x/v2/reply?&type=1&oid=19390801&pn="+str(page)
        json_comment = get_page_json(url)
        parse_page_json(json_comment)
        print("正在保存第%d页" % int(page+1))

        if page%20 == 0:
            time.sleep(5)

main()

可左右滑动哦~


其中主要涉及到两个知识点:


1、通过fake_useragent生成随机UserAgent


不管是做开发还是做过网站的朋友们,应该对于User Agent一点都不陌生,User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。


通过UA来判断不同的设备或者浏览器是开发者最常用的方式方法,这个也是对于Python反爬的一种策略,但是有盾就有矛啊---我的矛就是让抓取行为和用户访问网站的真实行为尽量一致。


忽略ssl验证:

ua = UserAgent(verify_ssl=False)


2、Chrome控制台中Network的Preview的正确用法


Response:

640?wx_fmt=png


Preview:

640?wx_fmt=png


一般情况下我们看Network里面的Preview和Response的结果似乎一模一样。不管是请求页面,请求页面还是请求js还是请求css,二者的结果都一样。直到今天从服务器端向web前端发送一段json格式的数据,才发现Preview的特殊功效。在Preview(预览功能)中,控制台会把发送过来的json数据自动转换成javascript的对象格式。而且可以层层展开,方便前端工程师遍历调用(特别是在多维的情况下),也方便我们Python爬虫工程师解析JSON数据。


二、数据清洗预览


由于我们在解析数据时已经将数据处理过,因此下载存为的数据已经干净,没有杂乱信息。我们从中整理出Top10评论:


640?wx_fmt=png


从上述评论中也可看出,第三、第四评论内容都是与春晚有关,也可以看出网友对本山大叔回归春晚的期待。看着视频,一句“改革春风吹满地”,回荡在脑海中几天都挥之不去。心里默念着:本山大叔要是能上春晚,该多好啊!


三、后记


在经过全民的参与和发酵过后,各种版本一应而出,尤其是英文版,押韵之余无人能敌!



我只想借这首鬼畜歌曲,回忆一下本山大叔曾经带给我们的欢乐,尤其是那些郎朗上口的台词。文章的最后我想用一句话总结一下,那就是——“我十分想念赵本山!”


你们期待有赵本山的春晚吗

点赞或评论告诉小编吧smiley_12.png


640?wx_fmt=jpeg640?wx_fmt=jpeg

这篇关于我们用Python分析了B站4万条数据评论,揭秘本山大叔《念诗之王》大热原因!...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901600

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和