Python B站“野生”api的分析使用 - Go语言中文社区

Python B站“野生”api的分析使用


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主的原有粉丝量,具体就需要将这些因素量化。好了,不多说,我先继续去分析分析了。

如果你有什么好的想法,欢迎留言交流哦!!!

最后

希望对大家有所帮助!:-)

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Q_QuanTing/article/details/83897255
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢