爬虫简单应用——爬取哔哩哔哩up主粉丝数

B站上最近挺流行爬取UP主粉丝数做各种显示屏,灯牌之类。

今天我们使用上次学习的request.get()方法做一个简单的爬虫应用——爬取B站xxUP主粉丝数。

1、实现环境:

  • 操作系统:Ubuntu/Windows
  • Python2/Python3
  • 2、技能前提:

  • 基本了解request.get的用法。
  • 基本理解HTTP协议
  • 基本了解前后端分离
  • 基本了解json文件格式
  • 基本掌握python语法
  • 熟练掌握浏览器检查的用法
  • 3、实现过程

    以我2019年最关注的的主播 朱一旦的枯燥生活 为例
    他的粉丝页面在这个链接:https://space.bilibili.com/437316738/fans/fans
    显然,B站上每个用户都有自己的独一无二的ID,假设它为xxx。每个用户的个人空间地址则为 https://space.bilibili.com/xxx。容易发现,每个用户的粉丝页面地址为https://space.bilibili.com/xxx/fans/fans。每个用户的关注页面地址为https://space.bilibili.com/xxx/fans/follow

    于是我们使用上篇文章讲到的request.get方法,获取粉丝页面地址的源码。

    import requests
    url = "https://space.bilibili.com/437316738/fans/fans"
    html = requests.get(url)
    print(html.text)
    

    我们获取到的输出如下:

    跟我们预想的不太一样?
    经过观察发现,B站的html源码都是通过js动态生成的,我们不能用爬取静态网页那一套来爬取。(类似上篇中讲到的微博粉丝页面)
    上篇文章中我有提到如何爬取JS生成的html代码(即动态网页)。在这里我们介绍一种方法。
    基本了解前后端分离的应该都知道,前端发送请求给后端,后端接收请求连接数据库获取数据,再返送到前端。
    而后端基本上都是以json文件的形式返回给到前端。
    什么是json文件?
    键值对!
    (此处不再赘述)
    我们只要获取到网页后端向前端发送的json文件,同样可以分析提炼出我们想要的数据。
    所以,打开你的Chrome浏览器。
    进入粉丝界面网址,右键检查,点击network。
    我们可以看到如下界面(如果没有的话可以刷新一下网页)

    那么左边的那么多其实就是我们发出的请求了。无论是图片,还是数据信息。
    我们需要找到的是哔哩哔哩发送粉丝信息的api。
    此处理论上没有捷径,建议一个个点开图中标记的链接观察有无类似粉丝信息的数据

    当然也可以直接百度看看前人找到的链接。
    所以在此处是https://api.bilibili.com/x/relation/stat?vmid=437316738&jsonp=jsonp
    我们发现这就是我们需要的json文件:

    所以我们只需要爬取这里的内容并且读取follower对应的信息就行了。

    import requests
    import json
    url = "https://api.bilibili.com/x/relation/stat?vmid=437316738&jsonp=jsonp"
    html = requests.get(url).json()
    mid = fans = html.get("data").get("mid")
    fans = html.get("data").get("follower")
    print(mid)
    print(str(fans)+"\n")
    

    4、扩展
    爬取到了粉丝数我们能做什么呢?
    我在ubuntu服务器下通过crontab工具,定时每分钟执行一次python脚本,并把数据和时间信息存储进文件。
    一段时间以后就有足够的数据用来画图进行分析啦!
    (树莓派正在路上)

    发表评论