欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pyhon爬虫 | 获取b站当前在线人数---获取数据并保存在数据库中

程序员文章站 2022-07-13 08:47:55
...

本文介绍了如何获取b站当前在线人数的一种方法
本文同步发布雨我的个人博客–弋江畔

写在前面

在2019年底的时候,b站主页右侧的在线人数按钮不再显示当前在线人数,但任然可以通过一个api接口获取,此爬虫就可以通过这个接口按时获取在线人数数据。

思路分析

  1. 请求接口获取数据
  2. 分析返回值,求得所需数据
  3. 将数据储存在数据库中
  4. 绘制图表,观察规律

绘制图表的方法将在日后更新

代码部分

  1. 请求接口获取数据
    通过网上搜索得知目前返回在线人数的接口地址为:
    https://api.bilibili.com/x/web-interface/online?&;jsonp=jsonp
    打开之后获得以下数据:Pyhon爬虫 | 获取b站当前在线人数---获取数据并保存在数据库中
    观察之后可知为JSON格式,通过在线工具(一个非常好用的JSON在线解析网站)解析之后,得到下面这些内容:Pyhon爬虫 | 获取b站当前在线人数---获取数据并保存在数据库中
    至此数据获取完毕。

  2. 分析返回值,求得所需数据
    分析可知其中的web_online为我们所期望的值(其余值的意义在以后的文章中会解释),为了获取此值需调用python中的json库。
    josn数据的格式类似于python中的字典,因此对返回的json格式的值需要进行处理,也就是调用 json.loads() 函数,其作用是是将json格式数据转换为字典,这样就可以通过来进行数据的读取,其中在线人数的键为 [‘data’][‘web_online’] ,代码如下;

    url = "https://api.bilibili.com/x/web-interface/online?&;jsonp=jsonp"
    r = requests.get(url)
    json_obj = json.loads(r.text)
    num = json_obj['data']['web_online']
    

    同时我们也需要数据对应的时间,此时调用time库,代码如下:

    t = time.strftime("%Y %m %d %H:%M:%S", time.localtime())
    
  3. 保存数据
    因为在线的人数一直在波动,所以程序的设定为每十分钟获取一次数据,直接将其储存在本地的txt活excel表格中固然简单,但是时间一长就会超出其储存容量,而且数据也可能丢失,因此我的方案是将其储存在服务器上的数据库中。
    首先是创建数据库,此时要用到pymysql库,代码如下:

    conn = pymysql.connect(host='***.***.***.***',user='***',passwd='***',port=3306,charset='utf8mb4')# 此处填写你的服务器地址,数据库用户名,密码,端口,编码格式
    cursor = conn.cursor()# 数据游标
    sql = "CREATE DATABASE bilibili DEFAULT CHARACTER SET utf8mb4"# 创建一个名叫 bilibili 的数据库
    cursor.execute(sql)# 执行数据库sql语句
    
    

    若是在本地连接服务器的数据库,记得要开放服务器对应的端口。
    然后是创建webonline表,代码如下:

    conn = pymysql.connect(host='***',user='***',db = "bilibili" ,passwd='***',port=3306,charset='utf8mb4')# 此处填写你的服务器地址,数据库用户名,连接的数据库名称,密码,端口,编码格式
    cursor = conn.cursor()# 数据游标
    sql = "CREATE TABLE webonline(time VARCHAR(16), number int)"# 创建一个名为webnoline的表,有两栏名为time和number的数据,注意要规定数据类型
    cursor.execute(sql)# 执行数据库sql语句
    

    注意要规定数据类型,不然储存的内容会与预期不符合。

  4. 绘制图表
    pyecharts是一款非常棒的数据可视化工具,具体方法将在下篇更新。

写在后面

至此,我们已经获取了b站在线人数的数据,在下一篇文章中,我将介绍如何通过pyecharts将数据可视化以及如何将此爬虫部署到自己的服务器上。