Python B站“野生”api的分析使用
Python B站“野生”api的分析使用简介突然发现自己好久没有写博客了,哎,主要都是在忙一些乱七八糟的东西。B站也就是哔哩哔哩(bilibili)作为国内领先的年轻人文化社区,当然也要去混一混。最近自己也制作或则搬运翻译了一些有意思的视频,但是无奈都没什么人看。这就激起了我的好奇心,究竟怎么样才能提高自己视频的访问量呢?(当然这篇文章不是教你如何增加视频访问量的,因为我也还没发现 >︿<...
Python B站(bilibili)“野生”api的分析使用
简介
突然发现自己好久没有写博客了,哎,主要都是在忙一些乱七八糟的东西。B站也就是哔哩哔哩(bilibili)作为国内领先的年轻人文化社区,当然也要去混一混。最近自己也制作或则搬运翻译了一些有意思的视频,但是无奈都没什么人看。这就激起了我的好奇心,究竟怎么样才能提高自己视频的访问量呢?(当然这篇文章不是教你如何增加视频访问量的,因为我也还没发现 >︿< ,本篇文章将教你如何去获取api并进行使用)
为了探索这个问题,我就需要去获取一些数据进行分析。
API分析和使用
我自己分析了一些接口,如果要使用那些接口的话请直接拉到文末。
1. 打开哔哩哔哩
打开B站首页后,不是点进某个视频看起来了。如果就这样是不可能获取到api的。要搞点技术性的活,补充一句我这里用的是火狐浏览器,我们需要按一下F12进行web开发者模式。这个时候你可以看到:
主要是分析红框中的红圈中的网络。
2. 网络抓包
进入刚刚打开的网络工具,这个时候你会发现没有几条数据,或则是空的。不用慌,按一下F5或则直接刷新一下页面,你就会发现有源源不断的数据出现了。
回归正题,我们要获取的是api,这里面有这么多的数据,这么找啊?
这里我就简单的介绍一下三种方式:
1. 排序
第一种方式就是最简单的排序,我们点击一下工具栏中的域名,他就会把同类的放在一起,这样看起来就非常的方便了。恰好我们要查找的api首字母是a,最前面我们就可以看到了。
2. 粗筛选
第二种方式是粗略的筛选,这种筛选方式可以很好的排除一下无用的干扰,例如css、js、图片、字体等文件的加载。因为我们这里不需要看到这些内容。
3. 细筛选
第三中方式就是非常的精准的筛选了,能够找到你想要的东西,这里的用法是“类型:需要查找的内容”,例如我用的“domain:api.bilibili.com”。
当然这三种方法配合起来用,将让你的分析工作效率倍增。
3. 分析api
到了最关键的一步啦,找到了api的链接后,我们需要明白都是干啥用的?
从图中,我们可以看到我这里标注了三个椭圆。我们来一一看一下:
第一个status?…, status应该是什么状态(我看了一下返回的json数据,我也不知道这是啥)
第二个slideshow?…, slideshow应该是滑动显示,我截了个图:
看到了吧,这个api原来是给这一区域传输数据的。
第三个online?…, online应该是在线,我也截个图看看:
原来这个api是可以用来查询现在有多少人在线的以及今天累计有多少投稿量。当然其中还有一些数据都是有他的含义的,只不过有些在页面显示出来了,而有些没有显示。没有显示的我们只能猜测是什么了。
4. 使用api
通过上面的分析,我们好像找到了一个非常拥有的api接口,就是那个能够查询当前在线人数和投搞数量的接口。我们可以设想,当b站上的人数最多的时候,我们在投稿是不是能够获得更多的观众观看呢?同时在投稿最少的时候,我们发出自己的视频是不是也能够让更多的观众看到呢?
我们来看一下这个接口如何使用:
如果玩过python requests库的看到上面那张图应该就知道这么做了吧?
下面我贴出代码:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
#
# @Version : 1.0
# @Time : 2018/11/9
# @Author : 圈圈烃
# @File : online_data
# @Description:
#
#
import requests
def get_api():
# 请求头
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Host": "api.bilibili.com",
"Referer": "https://www.bilibili.com/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
}
# 刚刚获取的api
api_url = "https://api.bilibili.com/x/web-interface/online"
# 开始请求
res = requests.get(api_url, headers=headers)
online_dic = res.json()
print(online_dic)
print("最新投稿:%d" % online_dic['data']['all_count'])
print("在线人数:%d" % online_dic['data']['web_online'])
if __name__ == '__main__':
get_api()
看看输出:
{'code': 0, 'message': '0', 'ttl': 1, 'data': {'region_count': {'1': 377, '11': 1, '119': 20, '129': 75, '13': 38, '155': 291, '160': 3237, '165': 28, '167': 32, '177': 3, '181': 1248, '23': 0, '3': 867, '36': 1026, '4': 4759, '5': 1356}, 'all_count': 13358, 'web_online': 1736867, 'play_online': 2285147}}
最新投稿:13358
在线人数:1736867
我们成功的获取到了数据。
如果我们每隔十分钟(时间可以长一点)爬取一次,爬个几天,我们就能够获取B站的在线人数变化图了。
B站其他接口
online_api = "https://api.bilibili.com/x/web-interface/online" # 在线人数
video_api = "https://api.bilibili.com/x/web-interface/archive/stat?&aid=%s" # 视频信息
newlist_api = "https://api.bilibili.com/x/web-interface/newlist?&rid=%s&pn=%s&ps=%s" # 最新视频信息
region_api = "https://api.bilibili.com/x/web-interface/dynamic/region?&rid=%s&pn=%s&ps=%s" # 最新动态信息
member_api = "http://space.bilibili.com/ajax/member/GetInfo" # 用户信息
stat_api = "https://api.bilibili.com/x/relation/stat?vmid=%s" # 用户关注数和粉丝总数
upstat_api = "https://api.bilibili.com/x/space/upstat?mid=%s" # 用户总播放量和总阅读量
follower_api = "https://api.bilibili.com/x/relation/followings?vmid=%s&pn=%s&ps=%s" # 用户关注信息
fans_api = "https://api.bilibili.com/x/relation/followers?vmid=%s&pn=%s&ps=%s" # 用户粉丝信息
如果需要具体的使用方法欢迎访问我的GitHub,地址如下:
https://github.com/StuPeter/Bilibili_Views_spider
数据简单分析
关于如何连续的获取呢?如果你有自己的Linux服务器,当然可以使用crontab定时任务。如果你打算用自己的windows电脑,可以使用计划任务,具体如何设置可以看我的另一篇文章《Win10环境下python脚本定时运行》。
最后和大家分享一下我的树莓派爬了五天的成果:
从图中我们可以看出来每天的在线人数的高峰主要在 21:30 - 22:40 之间,最低谷大概在早上 4:10 - 6:30 左右。因为图中的前三天是工作日,后两天为周末,所以在线人数变化的规律略有不同,但是总体上是一致的。
当然这里面还有东西可以去挖掘解读,在此就不细述了。如果要找到一个好的投稿策略,这些数据是远远不够的。例如:我们可以获取每个整点投稿的新视频,然后对这些视频进行一个24小时的跟踪,观察这些视频的播放量的变化,找到播放量增加最快的时间段。不过还得考虑视频的类型,发布视频的up主的原有粉丝量,具体就需要将这些因素量化。好了,不多说,我先继续去分析分析了。
如果你有什么好的想法,欢迎留言交流哦!!!
最后
希望对大家有所帮助!:-)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)