程序员用 Python 扒出 B 站那些“惊为天人”的UP主!
前言
!
近期B站的跨年晚会因其独特的创意席卷各大视频网站,给公司带来了极大的正面影响,股价也同时大涨,想必大家都在后悔没有早点买B站的股票:
然而今天我们要讨论的不是B站的跨年晚会,而是B站的核心资源:“惊为天人”的阿婆主们,文章的灵感来自于知乎热榜上的一个问题:
数据获取
上面的问题一共获得了859个回答,本文的数据也正来源于此,由于很多回答都会将带有阿婆主ID的链接在回答中体现,如下图所示:
我们可以将问题中出现的阿婆主空间id进行了爬取,但考虑到并不是所有回答都会带有这样的ID,于是将一些加粗的字体进行了提取,从中获得一些阿婆主的名称,作为数据的补充:
上面的这个回答就是一个典型的案例,其中提到了之前非常火的获得库克生日祝福的小学生,提取数据的一些代码如下:
# 开始爬取数据
driver = webdriver.Chrome()
driver.maximize_window()
url = 'https://www.zhihu.com/question/291506148'
js='window.open("'+url+'")'
driver.execute_script(js)
for i in range(1000):
time.sleep(1)
js="var q=document.documentElement.scrollTop=10000000"
driver.execute_script(js)
print(i)
# 整理数据
all_html = [k.get_property('innerHTML') for k in driver.find_elements_by_class_name('AnswerItem')]
all_text = ''.join(all_html)
pat = '/space.bilibili.com/\d+'
spaces = list(set([k for k in re.findall(pat,all_text)]))
现在获取到了要这些“惊为天人”的阿婆主们的ID,下一步要做的就是需要爬取他们B站的个人空间,获得更多详细的信息:
上面就是B站知名科学家手工耿的个人空间,从中我们可以获取手工耿的粉丝数,视频主要类型(一直以为应该是科技,没想到居然是生活,B站节操可以的)以及所有视频平均的播放量、弹幕数、评论数,作为后续进行排名的依据,部分代码如下:
upstat = pd.DataFrame(columns=['name','fans','face','main_type','total_video',
'total_play', 'total_comment'])
for i in range(len(spaces)):
try:
time.sleep(1)
space_id = str(spaces[i].replace('/space.bilibili.com/',''))
url= 'https://api.bilibili.com/x/web-interface/card?mid={}&jsonp=jsonp&article=true'.format(space_id)
html = requests.get(url=url, cookies=cookie, headers=header).content
data = json.loads(html.decode('utf-8'))['data']
this_name = data['card']['name']
this_fans = data['card']['fans']
this_face = data['card']['face']
this_video = int(data['archive_count'])
total_page = int((this_video-1)/30)+1
video_list=[]
for j in range(total_page):
url = 'https://api.bilibili.com/x/space/arc/search?mid={}&ps=30&tid=0&pn={}&keyword=&order=click&jsonp=jsonp'.format(space_id,str(j+1))
html = requests.get(url=url, cookies=cookie, headers=header).content
data = json.loads(html.decode('utf-8'))
if j == 0 :
type_list = data['data']['list']['tlist']
this_list = data['data']['list']['vlist']
video_list = video_list + [ this_list [k] for k in range(len(this_list))]
type_list = list(type_list.values())
type_list = {type_list[k]['name']:int(type_list[k]['count']) for k in range(len(type_list))}
this_type = max(type_list,key=type_list.get)
this_play = sum([video_list[k]['play'] for k in range(len(video_list)) if video_list[k]['play'] != '--'])
this_comment = sum([video_list[k]['comment'] for k in range(len(video_list)) if video_list[k]['comment'] != '--'])
upstat = upstat.append({'name':this_name,
'fans':this_fans,
'face':this_face,
'main_type':this_type,
'total_video':this_video,
'total_play':this_play,
'total_comment':this_comment},
ignore_index=True)
print('success:'+str(i))
except:
print('fail:'+str(j))
continue
最终我们就获得了B站200多位“惊为天人”的阿婆主们的信息,概览数据如下:
总体概览
获得了这些数据之后,我们首先看一下这些“惊为天人”阿婆主们发布的视频主要类型分布:
由于B站生活的分类中包罗万象,手工耿和李子柒都被划归到了生活类,想想都玄幻,因此这一类型的视频是分组多的,另外科技和数码类的占比也是非常多的,印证了B站是个优秀的学习网站的结论,有兴趣的可以参照另一篇文章:你相信逛B站也能学编程吗?
除此之外的视频可统称为娱乐类,包括了游戏、影视这些,之后会将视频类型按照科技、生活、娱乐进行大的划分,寻找各个类别最为“惊为天人”的阿婆主。
在开始进行正式的排名前,首先用Python将这些阿婆主的头像进行拼接,获得下面的图片,看看一眼望去有多少是你非常熟悉的阿婆主:
这部分代码如下:
i = 0
for i in range(upstat.shape[0]):
loc = 'D:/爬虫/惊为天人/'+upstat['name'][i]+'.jpg'
# request.urlretrieve(upstat['face'][i],loc)
img = mpimg.imread(loc)[:,:,0:3]
img = cv2.resize(img, (500,500),interpolation=cv2.INTER_CUBIC)
if i % 20 == 0:
row_img=img
elif i == 19:
row_img=np.hstack((row_img,img))
all_img = row_img
elif i % 20 == 19:
row_img=np.hstack((row_img,img))
all_img = np.vstack((all_img,row_img))
else:
row_img=np.hstack((row_img,img))
i = i+1
plt.axis('off')
plt.margins(0,0)
plt.imshow(all_img)
plt.savefig('头像.png',dpi=1000)
综合排名
下面要做的事情就比较大胆,要斗胆为这些阿婆主们进行排名,综合考虑他们的粉丝数,视频平均弹幕数、播放量、评论数,获得一个综合的指数,特此声明:本排名仅供娱乐,如要深究,AWSL
首先看一下进入TOP10的阿婆主们:
小编近期刚刚被安利的巫师财经榜上有名,建议大家去看一下,真的是将复杂的金融知识说得很接地气,华农兄弟和敬汉卿两大知名阿婆主也榜上有名,下面再来看下TOP11-20的榜单:
徐大sao,李子柒和手工耿在榜单中同时出现,未来有机会,希望有人能策划一次他们三人之间的合作,流程都想好了,手工耿为李子柒提供后现代的工具,李子柒利用手工耿的神器制作世界上最辣的辣椒,之后由徐大Sao一口吃掉,手工耿最后再用自己的脑瓜崩为徐大Sao缓解辣椒带来的不适感
分类排名
进行完综合排名之后,下面将所有阿婆主按照科技、生活、娱乐进行综合排名,分别活得各个分类的TOP10:
有了分类排名后,大家就可以按照自己的喜好按需索取,相信看完之后,脑洞会语法变大,一段时间后可以去尝试自己在B站发布视频,成为B站粉丝达到两位数的知名(才怪)阿婆主
最后用手工耿在B站播放量最多的一个视频作为本文的结尾,这个视频非常好的体现了本文“惊为天人”的主题,也希望大家能亲自去尝试一下,如果用完还能四肢健全地写下使用感受,欢迎与我们分享
程序员用 Python 扒出 B 站那些“惊为天人”的UP主!的更多相关文章
- 给Lisp程序员的Python简介
给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...
- C++程序员学Python
目录 C++程序员学Python 第二章.变量和数据类型 1.注释语句前用#: 2.常用于大小写函数: 第三章.列表 1.列表简述 2.修改,增加,插入,删除列表元素 第四章操作列表 1.遍历 2.创 ...
- 【Python】Java程序员学习Python(五)— 函数的定义和使用
不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...
- 程序员的智囊库系列之2----网站框架(framework)
程序员的智囊库系列之2--网站框架(framework) 这是程序员的智囊库系列的第二篇文章.上一篇文章讲了服务器与运维相关的工具,这篇文章我们将介绍几个搭建网站的框架: django express ...
- 【Python】Java程序员学习Python(二)— 开发环境搭建
巧妇难为无米之炊,我最爱的还是鸡蛋羹,因为我和鸡蛋羹有段不能说的秘密. 不管学啥,都要有环境,对于程序员来说搭建个开发环境应该不是什么难题.按顺序一步步来就可以,我也只是记录我的安装过程,你也可以滴. ...
- 为了运行十年前的代码,程序员们甚至翻出了一台 1977 年的 Apple II
"Hello, World!" 46 年过去,这段被世人熟知的代码仍散发着历久弥新的魅力,和它一起登场的 C 语言,如今也成长为世界几大通行编程语言之一,为互联网世界乃至现实世界都 ...
- 来自Java程序员的Python新手入门小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 程序员,Python 这次彻底上位了!
在 2018 年底,我们迎来了编程语言的最后一波洗礼.近期 TIOBE 公布了 12 月编程语言排行榜,前三名变为: Java.C.Python. 而在 PYPL 榜单上 Python 在今年 5 月 ...
- 一位资深程序员面试Python工程师的岗位心得和历程【新手必须】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:程序员阿牛说一些面试的心得体会: 1.简历制作我做了两份简历,用两个手机 ...
随机推荐
- Java笔记--常用类
1.String类: --使用Unicode字符编码,一个字符占两个字节: --String类是一个final类,代表不可变的字符序列: --字符串是不可变的,一个字符串对象一旦被配置,其内容是不可变 ...
- 剑指offer自学系列(三)
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变,例如{5,1,4,2 ...
- 剑指offer自学系列(一)
题目描述:输入n个整数,找出其中最小的k个数,例如,输入{4,5,1,6,2,7,3,8}这8个数字,最小的4个数字是1,2,3,4 题目分析:首先我能想到的是先对数组排序,从小到大,然后直接输出想要 ...
- STL语句表跳转指令学习
打开语句表程序状态监控 发现 被跳过的指令用普通字体显示 被执行的指令用加粗的字体表示 录制成视频 如果除数是0 发生了溢出 用 JUO 跳转指令,跳转到 M001 例程已经录制成视频 上传到百度网盘 ...
- HDU - 6006 Engineer Assignment (状压dfs)
题意:n个工作,m个人完成,每个工作有ci个阶段,一个人只能选择一种工作完成,可以不选,且只能完成该工作中与自身标号相同的工作阶段,问最多能完成几种工作. 分析: 1.如果一个工作中的某个工作阶段没有 ...
- POJ - 2456 Aggressive cows(二分+贪心)
题意:把c个牛分进n个摊位,摊位位置已知,所有摊位分布在0 <= xi <= 1,000,000,000,问两头牛间最小距离的最大值. 分析:找所有最小距离取个最大的.所以二分找这个最小的 ...
- xml配置文件解释
XML 指可扩展标记语言(EXtensible Markup Language) xmlns:是指XML命名空间 ( XML Namespace ) XSD是指XML结构定义 ( XML Schema ...
- python 检测端口是否被占用
前记 python中有些常用的东西,虽然小,但是非常实用.这里就做个备忘吧. 实例 检测端口是否被占用. ''' -- coding: utf-8 -- import os import sock ...
- 16.swoole学习笔记--异步事件
<?php //异步事件 $fp=stream_socket_client(); fwrite($fp,"GET / HTTP/1.1\r\nHost:www.qq.com\r\n\r ...
- 用 Python 编写一个天气查询应用 pyqt5
效果预览: ! 一.获取天气信息 使用python获取天气有两种方式. 1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容. 2)另一种 ...