当前位置: 首页 > 编程日记 > 正文

赵本山:我的时代还没有结束 | Python告诉你

640?wx_fmt=png

作者 | 丁彦军

来源 | 恋习Python(ID:  sldata2017)

【AI科技大本营按】今年春晚的小品好看吗?没有了赵本山的春晚总觉得少了点什么,然而许久不登春晚舞台的本山大叔借着B站的东风证明了「你大爷还是你大爷」。


最近很多人被“改革春风吹满地, 中国人民真争气”魔性的旋律所洗脑,实际上这段魔性的旋律来自于鬼畜神曲《念诗之王》,而这段神曲就是根据本山大叔的作品所剪辑的。目前《念诗之王》在B站播放量已经接近3000万!今天我们就来用Python分析下《念诗之王》火起来的原因。


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


640?wx_fmt=jpeg


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


640?wx_fmt=jpeg


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


640?wx_fmt=jpeg


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



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


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


还是老规矩,老套路(是不是有股熟悉的味道),恋习Python常用的三部曲:数据获取、数据清洗预览、数据分析可视化。


一、数据获取


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


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条(楼层下面存在评论)。今天恋习Python与大家一起主要是爬取楼层评论,共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数据。


二、数据清洗预览


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


640?wx_fmt=png


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


三、后记


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



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


(本文为AI科技大本营转载文章,转载请联系作者。)


征稿


640?wx_fmt=png


推荐阅读:

  • Playboy封面女郎、互联网第一夫人,程序员们的“钢铁审美”

  • 从I到R:人工智能语言简史

  • 如果我回腾讯上班

  • 断舍离:我彻底戒掉苹果、微软、Google、Facebook 和亚马逊之后?

  • “离开 360 时,它只给了我一块钱”

  • 假期倒计时, 这份完整区块链开发资源列表, 赶紧收藏学起来!

  • 这4门AI网课极具人气,逆天好评!(附代码+答疑)

  • 给AI开发者的新年礼物,技术公开课大放送(附演讲PPT)

  • 如何用最强模型BERT做NLP迁移学习?

  • “百练”成钢:NumPy 100练

    640?wx_fmt=png

点击“阅读原文”,打开CSDN APP 阅读更贴心!

相关文章:

038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>组件之WEB开发中组件使用场景与定义组件的方式</title><script src"vue.js"></script> </head> <body> <…

IronPython系列:Composite Pattern及其实现

最近挺经常做鱼的。对于做鱼的步骤算是熟悉。以烤制为例&#xff0c;主要有三步&#xff1a;洗&#xff08;Clean&#xff09;、切&#xff08;Cut&#xff09;和烤&#xff08;Bake&#xff09;。烤鱼&#xff08;Bake&#xff09;又有两个小步&#xff1a;加热(Heat)和烤(Bak…

2019全球AI 100强,中国占独角兽半壁江山,但忧患暗存

整理 | apddd出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;日前&#xff0c;创投研究机构CB Insights发布了年度人工智能企业百强榜单——由100个最具前途的AI公司组成&#xff0c;它们从3000多个候选者中脱颖而出&#xff0c;其业务涵盖人工智能硬件、数据基础设施…

【linux】串口编程(三)——错误处理

一个程序的优劣&#xff0c;可以从多个角度来判断&#xff0c;错误处理就是其中之一。从代码中的错误处理部分&#xff0c;可以体现出一个程序员的水平和修养。 下面还是以libmodbus为例&#xff0c;总结下串口编程中的错误处理。 【1】基础 【1.1】modbus中错误处理有三种&a…

微服务实战之春云与刀客(三)—— 面向接口调用代码结构实例

2019独角兽企业重金招聘Python工程师标准>>> 概述 在上一篇中提到了spring cloud 面向接口调用的开发风格&#xff0c;这一篇会举一个简单的但完整的例子来说明整个代码结构。 代码已上传到 https://github.com/maruixiang/spring-cloud-demo/tree/master/demo1 代码…

如何创建复杂的机器学习项目?

翻译 | 光城责编 | 郭芮转载自CSDN&#xff08;CSDNnews&#xff09;scikit-learn提供最先进的机器学习算法。但是&#xff0c;这些算法不能直接用于原始数据。原始数据需要事先进行预处理。因此&#xff0c;除了机器学习算法之外&#xff0c;scikit-learn还提供了一套预处理方…

关闭vmware喇叭报警声

关闭vmware喇叭报警声 在vmware里面安装linux系统后&#xff0c;操作时经常使用tab键或使用VI时经常听到pc speaker突然叫一声&#xff0c;如果正当戴着耳机欣赏音乐&#xff0c;被这么一叫还要吓一跳。下面是解决办法&#xff1a;C:\Documents and Settings\All Users\Applica…

【ubuntu工具】Atom的简介及安装

Atom中文社区&#xff1a;https://atom-china.org/ 知乎atom&#xff1a;https://www.zhihu.com/question/22867204 Atom&#xff0c;是github用nodejs编写的一个编辑器 Atom安装步骤&#xff1a; sudo add-apt-repository ppa:webupd8team/atomsudo aptitude updatesudo a…

破解Win2008口令-ERD6.0

我们在日常使用计算机的过程中&#xff0c;大多都经历过由于忘记口令从而无法进入系统的遭遇。遇到这种问题该如何处理呢&#xff1f;很多朋友一定想到了形形的口令破解工具&#xff0c;这些工具中名气最大的就是ERD Commander Boot CD。 ERD Commander Boot CD是一张可以启动操…

【Qt】Qt5.9.0: error: GL/gl.h: 没有那个文件或目录

重新安装ubuntu&#xff0c;在编译Qt时报错&#xff1a; /home/Qt5.9.0/Examples/Qt-5.9/widgets/widgets/calculator/button.cpp:51: from …/calculator/button.cpp:51: /home/Qt5.9.0/5.9/gcc_64/include/QtGui/qopengl.h:139: error: GL/gl.h: 没有那个文件或目录 解决方…

给Chrome“捉虫”16000个,Google开源bug自检工具

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 在内部开发和使用八年之久&#xff0c;近日&#xff0c;Google 宣布开源 bug 自动化检测工具 ClusterFuzz。ClusterFuzz 是一款提供端到端的自动化模糊测试工具&#xff1a;从错误检测到分类排查&…

小巧的日志记录组件 - 开源研究系列文章

今天给大家带来一个小巧的日志记录组件LogHelper。这个组件是由Log4Net这个组件的由来而来的&#xff0c;不过只是写入.txt文本文件而已。如果能够对大家的项目有帮助那就更好了。 首先&#xff0c;打开.SLN解决方案&#xff0c;添加引用日志组件。 然后&#xff0c;先对日志组…

.NET开发人员值得关注的七个开源项目

微软近几年在.NET社区开源项目方面投入了相当多的时间和资源&#xff0c;不禁让原本对峙的开源社区阵营大吃一惊&#xff0c;从微软.NET社区中的反应来看&#xff0c;微软.NET开发阵营对开源工具的依赖正日益增强&#xff0c;本文就为所有.NET开发人员介绍7个应该关注的开源项目…

SystemTap了解

SystemTrap是监控和跟踪运行中的Linux内核操作的动态方法。 http://www.ibm.com/developerworks/cn/linux/l-systemtap/ 使用SystemTrap需要使用trap来运行一个stp脚本 如何安装&#xff1a; Centos下直接yum install systemtrap就行了 测试是否可以运行 运行&#xff1a;stap …

Windows 95被做成了App,可玩扫雷和纸牌

6 秒重温 Windows95 开机画面 作者 | 琥珀 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; “看到 Win95&#xff0c;再看到仙剑 DOS 的画面&#xff0c;突然有种想哭的感觉&#xff0c;小时候帮李逍遥实现了仗剑江湖的愿望&#xff0c;但自己却没有实现自己的愿望…

【Ubuntu】虚拟机VirtualBox安装win7完整步骤

在Ubuntu16.04中使用VirtualBox安装win7&#xff0c;亲测可以完美使用; 完整步骤参见如下链接&#xff1a; 1、VirtualBox安装步骤&#xff1a;http://www.xitongcheng.com/jiaocheng/xtazjc_article_23804.html 2、win7镜像下载&#xff1a;http://www.xitongcheng.com/jia…

全栈AI工程师指南,DIY一个识别手写数字的web应用

作者 | shadow chi本文经授权转载自 无界社区mixlab&#xff08;ID&#xff1a;mix-lab&#xff09;网上大量教程都是教如何训练模型&#xff0c;往往我们只学会了训练模型&#xff0c;而实际应用的环节是缺失的。def AIFullstack&#xff08; &#xff09;&#xff1a;本文从「…

mysql 中limit 用法!!

select * from mydb where id limit i,j; 意思就是从第i行开始&#xff0c;检索出j行&#xff0c;结束&#xff01;主要用于分页技术中&#xff0c;比如说我们一页现实10行&#xff0c;可以这样做&#xff1a;select * from mydb where id order by id desc limit $page,10($pa…

【Qt】Qt动态库和静态库的创建和使用

动态库(共享库)的创建 在Qt Creator中新建项目,选择Library 点击“Choose”进入下一步 选择创建库的类型:共享库 选择Kit套件 选择需要的模块 配置工程路径、名字等 Qt Creator自动创建的文件 我配置的动态库名字为:Share pro文件内容

23.3. Ethernet0/0 - Wan口配置

23.3.1. DHCP 动态IP地址 <Netkiller>system-view System View: return to User View with CtrlZ.interface Ethernet0/0port link-mode routenat outboundip address dhcp-allocipsec policy navigator #[Netkiller]display dhcp client Ethernet0/0 DHCP client inform…

用Python解锁“吃鸡”正确姿势

大吉大利&#xff0c;今晚吃鸡~ 今天跟朋友玩了几把吃鸡&#xff0c;经历了各种死法&#xff0c;还被嘲笑说论女生吃鸡的100种死法&#xff0c;比如被拳头抡死、跳伞落到房顶边缘摔死 、把吃鸡玩成飞车被车技秀死、被队友用燃烧瓶烧死的。这种游戏对我来说就是一个让我明白原来…

Oracle Grid Control 10.2.0.5 for Linux 安装和配置指南

一、概述&#xff1a;Grid Control的组件包括Management Agent, Management Service (OMS), Management Repository. 系统架构如下: 10g oem是一个基于web的管理架构&#xff0c;这和10g之前的笨重的java客户端有很大的区别。我们可以从2方面来研究它的架构&#xff0c;一个是管…

【Qt】Qt Plugin:Qt插件创建与使用

插件接口设计 以a+b=c的接口为例:int add(int a, int b) 在 主项目 工程中创建接口文件(一个头文件)eg:Add.h #ifndef ADD_H #define ADD_H#include <QtPlugin> class Add { public:virtual int add(int a, int b)= 0;//纯虚函数 }; Q_DECLARE_INTERFACE(Add, &qu…

9.5. SELINUX

禁用SElinux编辑/etc/selinux/config&#xff0c;修改如下内容&#xff1a; SELINUXdisabled使用命令 getenforce setenforce 0lokkit --selinuxdisabledPlease enable JavaScript to view the <a href"http://disqus.com/?ref_noscript">comments powered by…

说说我们为什么需要加班

做软件这行&#xff0c;加班就是家常便饭。做了这么多年程序员&#xff0c;我还真没听哪个说公司不加班的&#xff0c;碰见好的不时、偶尔加班&#xff0c;差的就是无尽的加。加班是那么的邪恶、令人作呕&#xff0c;但又无法抗拒&#xff0c;它仿佛就像嫖客患上梅毒——摆脱不…

为 Django admin 登录页添加验证码

为什么80%的码农都做不了架构师&#xff1f;>>> 历史原因&#xff0c;使用上古版本 django 1.6.5&#xff0c;但新版本应该大同小异 首先添加自定义后台模块app&#xff0c; 如adm&#xff0c;并添加到 INSTALLED_APPS 下。 假设处理自定义登录的view是 apps/adm/v…

手机芯片谁是AI之王?高通、联发科均超华为

整理 | apddd出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;尽管相当数量的人工智能服务&#xff0c;是由云计算网络提供&#xff0c;但在响应低延迟、保护隐私、应用场景等方面&#xff0c;手机AI芯片无可替代。例如人脸解锁&#xff0c;图像增强、识别&#xff0c…

【linux】error: stdio.h: No such file or directory

ubuntu 默认没有C和C编译环境 ubuntu 默认没有C和C编译环境&#xff0c;新装的ubuntu&#xff0c;使用gcc编译时&#xff0c;会报错&#xff0c;找不到某某头文件等。在编译一个demo&#xff0c;如hello world时&#xff0c;会报错&#xff1a; error: stdio.h: No such file …

SqlParameter的用法

1。一些面例子为例&#xff1a;List<SqlParameter> listp new List<SqlParameter>();listp.Add(new SqlParameter("userid", userid));string sql "select * from userbooks where useriduserid";在执行sql语句时 listp.Add(new SqlParamete…

程序员如何用“撞针“拯救35亿地球人?

春节假期即将结束&#xff0c;有多少程序员朋友已经离开家乡在返回北上广深等工作所在城市的路上&#xff1f;有多少程序员已经开工大吉开始了新一年的代码征程&#xff1f;回首这一个春节&#xff0c;8 部电影在大年初一齐上线&#xff0c;《流浪地球》在前期预售票房远不如《…