原标题:用Python分析本山大叔鬼畜视频为啥这么火

cxa,有着丰富的爬虫工作经验,公众号Python学习开发,擅长各种爬虫技术,熟悉大规模爬虫开发。热爱并喜欢钻研python。

改革春风吹满地,中国人民真争气。

2018年年末,“改革春风吹满地”火了。这是一个来自哔哩哔哩的一个鬼畜类音乐视频。

由up主小可儿上传,目前播放量已达到1400多万,有着相当高的热度。该视频剪辑了赵本山的历年作品的经典台词,配以略带喜感的音乐(bgm由其他up主制作),每一句台词衔接的相当完美。在网易云音乐里也可以搜到同名音乐,另有别名「念诗之王」,网易云音乐的一位名为A96ccA的这样听众评论道:

第一遍:这是啥玩意?

第二遍:嗯,还可以

第三遍:改革春风吹满地…

可以看出同样的是一首洗脑的音乐。

下面让我先来欣赏(再度洗脑)一下。

下面就让我们爬取b站上该视频的评论内容,并进行分析为什么这个视频会如此的火。

数据下载

首先我们打开视频:https://www.bilibili.com/video/av19390801.

然后找到评论部分,打开谷歌浏览器的控制台,查看network选项的请求信息。通过观察我们发现了这样的链接:https://api.bilibili.com/x/v2/reply?callback=jQuery17204794190151297566_1546432727230&jsonp=jsonp&pn=1&type=1&oid=19390801&sort=0&_=1546432740370

去掉没有用的信息最后我们得到最终的url形式为:https://api.bilibili.com/x/v2/reply?pn={pn}&type=1&oid=19390801

其中pn为第几页,目前看到评论有1129页,这些数据我们用作简单的数据分析基本够用了。

下面就可以编写我们的代码了,这里我采取的是异步网络请求模块aiohttp。然后保存下了每条评论的所以网页可以得到的信息,后期获取每条评论的内容,为后面数据分析使用

下面是主要爬取逻辑

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

asyncdeffetch(url):

asyncwithsem: #并发个数控制

asyncwithaiohttp.ClientSession() assession: #创建session

withasync_timeout.timeout( 10): #等10s

asyncwithsession.get(url) asres:

data = awaitres.json() #通过await获取异步过程中的数据

print(data)

awaitasyncio.sleep( 2) #加个异步等待防止被封。

awaitsave_data(glom.glom(data, "data.replies")) #glom模块json数据解析用。

这里需要用到以下模块,使用pip install即可安装

aiohttp

async_timeout

uvloop(windows就不用了,只支持unix系统)

glom

需要说明的是之前我就是因为没有加等待时间,所以被b站这个接口的链接给封了,造成的现象就是视频可以看但是评论是刷新不出来的,挺有意思的。关于aiohttp的使用方法。

到这里数据下载逻辑就完事了,下面是数据存储逻辑。

数据存储

因为上面的下载的结果是json格式,所以首先数据库就是mongodb,这里为了统一使用了异步mongo数据模块motor,一个基于事件循环的模块。

首先创建数据链接

classMotorBase:

_db = {}

_collection = {}

def__init__(self, loop=None):

self.motor_uri = ''

self.loop = loop orasyncio.get_event_loop()

defclient(self, db):

self.motor_uri = f "mongodb://localhost:27017/{db}"

returnAsyncIOMotorClient( self.motor_uri, io_loop= self.loop)

defget_db(self, db='weixin_use_data'):

ifdb notinself. _db:

self._db[db] = self.client(db)[db]

returnself._db[db]

这里使用模块有:

asyncio

motor

然后开始使用类似pymongo的方式插入数据,具体代码如下

asyncdefsave_data(items):

mb = MotorBase().get_db( 'weixin_use_data') #获取链接对象,weixin_use_data是我的数据库名。

foritem initems:

try:

awaitmb.bilibili_comments.update_one({

'rpid': item.get( "rpid")},

{ '$set': item},

upsert= True) #bilibili_comments是我的表名,update_one方法的作用是不存在就插入存在更新。

exceptException ase:

print( "数据插入出错", e.args, "此时的item是",item)

然后通过执行这个事件循环,事件循环是这里所有异步的基础。

loop= asyncio.get_event_loop() #创建一个事件循环

loop.run_until_complete(get_data()) #开始运行直到程序结束

数据解析

上面我们拿到了作出数据,但是数据都是json格式的,而且量很大,我们需要的只有评论内容,所以我们需要进一步对数据进行处理,同样的这里我也使用了文件读写异步模块aiofiles

这部分代码量也很少,用法和open file差不多,多了些异步的形式而已。

首先读取mongo里的数据

asyncdefget_data():

mb = MotorBase().get_db( 'weixin_use_data')

data=mb.bilibili_comments.find()

returndata

读取还是用的motor模块为了配合后面的文件读入使用。

asyncdef m2f():

data = awaitget_data()

asyncforitem indata:

t = item. get( "content"). get( "message").strip()

fs = awaitaiofiles.open(pathlib.Path.joinpath(pathlib.Path.cwd().parent, "msg.txt"), 'a+') #pathlib路径拼接

awaitfs.write(t)

到目前为止数据获取部分基本结束了,后面就是对上面的文本文件进行分析了。

数据分析

为了清晰的表达数据所带来的信息,对于评论信息,我们选用直观的方式--词云图

安装包

jieba

wordcloud

matplotlib

生成词云需要用的图

字体文件

mac中默认字体显示乱码,这里指定了别的字体msyhbd.ttf,网上随便搜了一个,windows可以或其他系统支持字体即可

停用词设置

经过分析大概设置了如下停用词:

哈哈

哈哈哈

xa0

一个

u3000

什么

视频

这个

up

看到

怎么

播放

真的

知道

已经

改革

春风

满地

鬼畜

抖音

现在

春晚

千万

助攻

停用词设置是为了去除一些没有意义的词,比如这个,那个之类的。或者当前文件的标题

代码如下

# -*- coding: utf-8 -*-

# @Time : 2019/1/2 7:52 PM

# @Author : cxa

# @File : cutword.py

# @Software: PyCharm

# coding=utf-8

importjieba

importmatplotlib.pyplot asplt

fromwordcloud importWordCloud

# 获取所有评论

comments = []

withopen( 'msg.txt', mode= 'r', encoding= 'utf-8') asf:

rows = f.readlines()

forrow inrows:

comments.append(row)

# 设置分词

comment_after_split = jieba.cut(str(comments), cut_all= False) #分词,cut_all=false

words = ' '.join(comment_after_split) # 以空格进行拼接

# 设置屏蔽词

STOPWORDS = set(map(str.strip, open( 'stopwords').readlines()))

print(STOPWORDS)

# 导入背景图

bg_image = plt.imread( '1.jpeg')

# 设置词云参数,参数分别表示:画布宽高、背景颜色、背景图形状、字体,屏蔽词、最大词的字体大小

wc = WordCloud(width= 2024, height= 1400, background_color= 'white', mask=bg_image,font_path= 'msyhbd.ttf',stopwords=STOPWORDS, max_font_size= 400,

random_state= 50)

# 将分词后数据传入云图

wc.generate_from_text(words)

plt.imshow(wc)

plt.axis( 'off') # 不显示坐标轴

plt.show()

# 保存结果到本地

wc.to_file( 'ggcfcmd.jpg')

最终结果

由此可以看出这视频最重要的还是洗脑,导致进来就出不去了,同样的也是追忆本山大叔多年来带给大家的无数快乐时光,总之洗脑就完事了。

为了方便大家的阅读代码,本文中所有涉及到的代码,已经传到https://github.com/muzico425/bilibilianalysis.git

改革春风吹满地~~~

*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

责任编辑:

python制作鬼畜_用Python分析本山大叔鬼畜视频为啥这么火相关推荐

  1. 用Python分析本山大叔鬼畜视频为啥这么火

    ♚ cxa,有着丰富的爬虫工作经验,公众号Python学习开发,擅长各种爬虫技术,熟悉大规模爬虫开发.热爱并喜欢钻研python. 改革春风吹满地,中国人民真争气. 2018年年末,"改革春 ...

  2. 利用python制作拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  3. python制作动态心电图_用python制作动态图表看全球疫情变化趋势

    点击上方"早起python",关注公众号 满满干货,极速送达 一.前言 最近国内疫情已经有所好转,但是国外的情况不容乐观,那么怎样用python去制作动态图表来看全球疫情变化趋势呢 ...

  4. python制作计算机程序_用 Python 开发实用程序 – 计算器

    一段时间前,自己制作了一个库 "sui-math".这其实是 math 的翻版.做完后,我又想到,python 既然可以轻易的完成任何的数学计算,何不用 python 开发一个小程 ...

  5. 使用python制作爬虫_使用Python的urllib和urllib2模块制作爬虫的实例教程

    urllib学习python完基础,有些迷茫.眼睛一闭,一种空白的窒息源源不断而来.还是缺少练习,遂拿爬虫来练练手.学习完斯巴达python爬虫课程后,将心得整理如下,供后续翻看.整篇笔记主要分以下几 ...

  6. 用python制作贺卡_使用Python创作自己的圣诞节动图贺卡,制作简单即刻生成

    引言 圣诞节就在眼前,怎样诚挚表达自己的心意呢,自己动手做一个定制动图贺卡,写上定制的祈福语,收到贺卡的人一定很开心. 干货 废话不多说,直接上源代码.Python 3环境直接运行,无任何依赖. 修改 ...

  7. 如何用python制作画像_利用Python搭建用户画像系统

    用户画像是当下很多企业都会提及的概念,多数情况下会和大数据以及营销挂钩.本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统. 1.什么是用户画像 用户画像可以 ...

  8. python制作测试报告_使用 python 生成 extent report 测试报告

    背景 一直使用 HTMLTestRunner 生成 app 自动化的测试报告内容,虽然加了截图的展示,还是感觉报告不够好看. allure 报告内容可以,但是要以 pytest 管理测试 case,且 ...

  9. 如何用python制作樱花_用python绘制樱花树

    黑夜可能漫长,但总会迎来温暖的阳光,三月如期而至,武大的樱花又一次盛开.那么今天就一起来看看怎样在python中画一棵美丽的樱花树- 说到用python画画,那当然就是小乌龟Turtle库了,为啥是t ...

最新文章

  1. python内存管理机制_[转] Python内存管理机制
  2. java设计模式:适配器设计模式
  3. VTK:可视化之LabelPlacementMapper
  4. java byte数组string_byte数组和String之间的转化
  5. JavaScript几个难点
  6. ListT转换为DataTable
  7. android webview打印,javascript - 如何在Android Webview中使网站上的打印按钮工作? - 堆栈内存溢出...
  8. 从零开始搭建公司电商系统架构技术栈,这套架构绝了...
  9. Linux stty 指令设置串口参数
  10. ResNet到底在解决一个什么问题呢?
  11. 基于长短期记忆神经网络的蛋白质二级结构预测
  12. 独立站运营 | 聊天聚合部件,助你提升100%私域转化率
  13. Zookeeper用作注册中心的原理
  14. 个人支付收款接口现状剖析
  15. 怎样linux下修复u盘,怎样Linux下修复U盘驱动器
  16. C#网络编程(同步传输字符串)
  17. 【C++】侯捷:C++面向对象高级编程(上)
  18. 中软培训day05-java实现斗地主
  19. Java项目如何导出数据为 PDF 文件?
  20. 深度学习高级,Keras多输入和混合数据实现回归模型

热门文章

  1. Qt解析王者荣耀英雄JSON文件
  2. 华为终端总部再投1.8亿买地
  3. 麦当劳中国与“中国探月”续签三年合作;CoCo推出冻干咖啡新品 | 食品饮料新品...
  4. 如何判断笔记本蓝牙硬件坏了_怎么看笔记本蓝牙版本 不是蓝牙4.0?
  5. JavaScript HTML5 手机网站 基本功能
  6. qemu sriov
  7. ZoomIt: 非PPT演示必备辅助软件
  8. flv.js 插件 完成 flv 格式的视频播放
  9. ICLR 2023 Oral | Batch Norm层等暴露TTA短板,开放环境下解决方案来了
  10. jQuery weui 下拉刷新