Python爬虫分析——B站UP主视频数据分析

背景

一个朋友的要求,对B站UP主的视频进行分析。至于要做什么,你懂的。

核心

使用B站提供的API,爬取数据,进行分析。具体B站提供的API就不说了,https://www.bilibili.com/read/cv3430609/,自己看去。

获取UP主的视频列表

使用getSubmitVideos。具体的格式为如下:

https://space.bilibili.com/ajax/member/getSubmitVideos?mid=xxx&page=x

其中:

1、mid表示UP主的UID(每个UP主都有自己的ID)。

2、page表示第几页。B站每页返回最多20个条信息。

样例数据

B站回传的数据是Json格式的。下面是某个UP主的部分信息样例数据,其中关键数据删除。

{
  "status":true,
  "data":{
    "tlist":{
      "36":{
        "tid":36,
        "count":36,
        "name":"      "}},
    "vlist":[{
      "comment":2,
      "typeid":39,
      "play":330,
      "pic":"fb405e9d76dd7268.jpg",
      "subtitle":"",
      "description":"xxxxxx",
      "copyright":"",
      "title":"xxxxxxxxxxx",
      "review":0,
      "author":"xxxxxxxxxx",
      "mid":    ,
      "is_union_video":0,
      "created":1584302350,
      "length":"38:59",
      "video_review":1,
      "is_pay":0,
      "favorites":1,
      "aid":964xxxxx5,
      "is_steins_gate":0,
      "hide_click":false},],
    "count":36,
    "pages":2}
}

配合B站对应的WEB页面可以猜测出部分数据的内容。

关键字含义备注
comment视频评论数量 
typeid视频隶属的区 
play视频的播放数量 
pic封面图片 
subtitle子标题不确定
description描述UTF-8转码后信息
copyright版权不确定
title视频的名字UTF-8转码后信息
review 不知道
author作者UTF-8转码后信息
midUP主的UID 
is_union_video 不知道
created上传时间 
length视频长度 
video_review 不知道
is_pay收费不确定
favorites收藏 
aid视频的ID 
is_steins_gate 不知道
hide_click 不知道

所有的数据对我们而言,最重要的数据是 mid 和 aid,其实 mid 是预先知道的。有了这个 aid 后,你就可以为所欲为了。

后面的内容就比较隐私了,就不写了。给各位道歉。

### 获取BUP信息的方法 #### API 接口获取 对于希望高效且合法地获取BUP相关信息的情况,建议优先考虑使用官方提供的API接口。这允许开发者直接访问结构化的数据资源,从而减少因网页结构调整带来的维护成本,并确保操作符合平台的服务条款[^1]。 #### 页面爬取技术 当无法通过公开API获得所需全部细节时,可以采用页面爬取的方式补充缺失的信息。具体来说,在打开目标UP页后,借助浏览器内置的开发者工具来探索并定位用于传输视频列表及其他元数据的实际HTTP请求路径。此过程有助于发现可用于自动化抓取的有效端点[^2]。 针对某些由JavaScript动态渲染的内容,简单的HTML解析可能不足以捕获最终呈现给用户的完整数据集。此时,则需进一步研究AJAX调用机制或者模拟更复杂的交互行为以绕过前端加载逻辑,进而达到全面收集的目的[^3]。 #### 实现方案概览 一种常见的实践策略是从获取所有视频唯一标识符(如BV号)入手,随后基于这些ID发起单独查询请求,逐步积累构成整个频道概况所需的各项属性值。这种方法不仅能够有效规避单次响应体积过大造成的性能瓶颈,同时也便于后续处理阶段中的错误恢复与增量更新[^4]。 ```python import requests def fetch_uploader_info(mid): url = f"https://api.bilibili.com/x/space/acc/info?mid={mid}" response = requests.get(url) data = response.json() if 'data' in data and data['code'] == 0: return { "name": data["data"]["name"], "face_url": data["data"]["face"], "fans_count": data["data"]["follower"] } else: raise Exception("Failed to retrieve uploader info") # Example usage uploader_data = fetch_uploader_info(123456789) print(uploader_data) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值