B站2千万视频信息爬虫

此文首发于我的个人博客:zhang0peter的个人博客


声明

  • 代码、教程均为本人原创,且仅限于学习交流,请勿用于任何商业用途!

数据结果在最下面。

准备工作

我使用的是Python3,数据库用的是Python自带的sqlite,使用requests库爬取。
安装需要的库

pip install requests

直接刷新视频页面来获取视频信息太慢,通过api地址能快速获取视频信息。
如:https://api.bilibili.com/x/web-interface/archive/stat?aid=19801429,
在浏览器中打开这个页面,可以获取json格式的数据:

{
  "code":0,
  "message":"0",
  "ttl":1,
  "data":{
    "aid":19801429,
    "view":583,
    "danmaku":4,
    "reply":2,
    "favorite":378,
    "coin":6,
    "share":6,
    "now_rank":0,
    "his_rank":0,
    "no_reprint":0,
    "copyright":2}
}

使用requests库获取数据,用concurrent.futures的多线程来加快爬取的速度,我采用的是32线程爬取。

数据获取

B站对爬虫采取的是一旦发现,就封ip半小时到1天不等的时间。
但是如果使用代理,爬取总共数量1900万(在2018年2月24,B站视频av号已经到2000万了)个视频信息需要花费很多时间。
幸运的我发现我的服务器爬取B站视频信息不会被封ip,于是我就把爬虫放到服务器上跑了整整5天,获得了1300万条有效数据。数据库文件有300M,GitHub无法上传,

数据处理

我使用的是SQLite Studio进行数据库操作

查询播放量前十的视频

B站2千万视频信息爬虫_第1张图片

查询收藏数前十的视频

B站2千万视频信息爬虫_第2张图片

aid号与播放量关系

可以从下图看出,随aid号的增加,视频的平均播放量在变少,爆款视频也在变少。
我认为主要原因是B站UP主变多,把许多大的UP主的粉丝分流了部分。
画图代码见 aid号与播放量关系.py
B站2千万视频信息爬虫_第3张图片
爬虫代码见 bilibili-spider.py

GitHub项目地址:https://github.com/zhang0peter/bilibili-video-information-spider

你可能感兴趣的:(python)