news 2026/5/18 20:14:04

Python自动化脚本实现B站关注列表批量管理:原理、实践与风险规避

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python自动化脚本实现B站关注列表批量管理:原理、实践与风险规避

1. 项目概述与核心价值

最近在整理自己的B站关注列表时,发现了一个挺普遍的问题:关注了太多UP主,但很多已经很久不更新,或者内容方向已经不是我感兴趣的了。手动一个个去清理,既费时又费力。就在我琢磨有没有什么自动化工具能帮忙的时候,发现了sunrisever/bilibili-follow这个项目。简单来说,它是一个用Python编写的脚本工具,核心功能就是帮你批量管理B站(Bilibili)的关注列表,比如一键取关所有UP主,或者根据特定条件(如最后更新日期、粉丝数)进行筛选后取关。

这听起来可能有点“暴力”,但对于想要快速清理关注列表、重新构建信息流的人来说,它确实是个利器。我自己就是一个深度B站用户,关注数一度超过500,每天动态里充斥着大量我不再感兴趣的内容,真正想看的反而被淹没了。这个项目正好切中了这个痛点——它不是官方功能,而是通过技术手段实现的第三方自动化方案。它的价值在于将繁琐、重复的人工操作转化为一次性的脚本执行,解放你的时间。当然,使用它需要一定的技术门槛,你需要能运行Python脚本,并且理解其背后的逻辑和潜在风险,这也是我接下来要详细拆解的内容。

2. 核心功能与实现原理深度解析

2.1 功能全景:不止于“一键取关”

很多人第一眼看到这个项目,会以为它只是个“一键全取关”的粗暴工具。实际上,它的功能设计考虑到了多种使用场景,远比想象中精细。

核心功能模块包括:

  1. 批量取关:这是基础功能,可以一次性取关当前账号的所有关注用户。这是清理“废墟”的最快方式。
  2. 条件筛选取关:这才是项目的精髓。你可以设定规则,让脚本智能地决定取关谁。常见的筛选条件有:
    • 最后更新时间:例如,取关超过1年未更新的UP主。这非常适合清理那些已经“弃坑”的创作者。
    • 粉丝数量:例如,只取关粉丝数低于一定阈值(如1万)的UP主,或者反过来,只保留大UP主。这可以用来优化关注列表的“质量”。
    • 关注时间:取关最早关注的一批UP主,可能你的兴趣已经发生了转移。
    • 自定义名单:通过一个文本文件输入特定的UP主UID(用户唯一ID),进行精准取关或保留。
  3. 关注列表备份:在执行任何破坏性操作(如取关)前,脚本会先获取你完整的关注列表,并保存为本地文件(如JSON或CSV格式)。这份备份至关重要,一是用于后续的筛选分析,二是一旦误操作,你还有机会手动加回来。
  4. 操作日志与安全确认:脚本在执行每一步,尤其是进行取关操作前,通常会要求二次确认,并输出详细的日志,告诉你即将对谁进行操作。这避免了因配置错误导致的“灾难”。

2.2 技术原理:模拟请求与API调用

这个项目本身不涉及复杂的算法,其技术核心在于对B站Web端或移动端API的逆向工程与模拟调用。简单说,就是让Python脚本模仿你的浏览器或B站App,去完成“登录”、“查询关注列表”、“发送取关请求”这一系列动作。

实现流程可以拆解为以下几个关键步骤:

  1. 身份认证(登录):这是第一步,也是最关键的一步。脚本需要获得你账户的权限。早期可能通过账号密码模拟登录,但这种方式极不稳定,且涉及敏感信息,风险很高。现在更主流、更安全的方式是使用CookieAccess Token

    • Cookie:你可以在浏览器登录B站后,从开发者工具中复制出关键的Cookie字段(如SESSDATAbili_jct)。脚本使用这些Cookie,就能让B站服务器认为请求来自已登录的你的浏览器。
    • Access Token:通过OAuth2等授权流程获取的令牌,权限更清晰,但获取流程对普通用户稍复杂。项目文档通常会详细指导你如何安全地获取这些凭证,并强调切勿泄露
  2. 数据获取(抓取关注列表):登录后,脚本会向B站关注列表的API接口发送HTTP请求。这个接口返回的数据通常是结构化的JSON,包含了每个关注UP主的详细信息:UID、用户名、粉丝数、最后动态时间、个性签名等。脚本会解析这些数据,并保存在本地,供后续筛选使用。

  3. 逻辑处理(条件筛选):脚本读取本地备份的关注列表数据,根据你预设的规则(如“最后更新时间早于2022年1月1日”)进行过滤,生成一个“待取关列表”。

  4. 执行动作(发送取关请求):脚本遍历“待取关列表”,对列表中的每一个UP主UID,向B站的“取关”API接口发送一个特定的HTTP POST请求。这个请求必须携带正确的认证信息和参数(如UP主的UID),服务器收到后就会执行取关操作。

注意:这里涉及的关键技术点是理解HTTP请求、API接口、JSON数据格式,以及如何构造带有认证信息的请求头(Headers)。项目的代码本质上就是将这些步骤用Python的requests库等工具串联起来。

2.3 依赖的核心技术栈

  • Python 3:项目语言,因其丰富的库和简洁语法成为此类自动化脚本的首选。
  • Requests:用于发送HTTP请求,获取数据和执行操作的主力库。
  • JSON/CSV处理:用于解析API返回的数据和读写本地备份文件。
  • 正则表达式或解析库:有时用于从原始HTML或复杂JSON中提取关键信息。
  • 日志模块(Logging):用于记录运行过程,方便排查问题。

3. 从零开始的完整实操指南

3.1 环境准备与项目获取

首先,你需要一个能运行Python的环境。如果你从未接触过,建议先安装Python 3.8或以上版本,并确保pip(Python包管理器)可用。

  1. 安装Python:前往Python官网下载对应操作系统的安装包,安装时务必勾选“Add Python to PATH”。
  2. 验证安装:打开命令行(Windows的CMD或PowerShell,macOS/Linux的Terminal),输入python --versionpip --version,能显示版本号即成功。
  3. 获取项目代码:由于项目托管在代码托管平台,你需要使用git命令克隆,或者直接下载ZIP压缩包。
    # 使用git克隆(推荐) git clone https://github.com/sunrisever/bilibili-follow.git cd bilibili-follow
    如果不用git,可以在项目页面找到“Download ZIP”按钮,下载解压后进入目录。
  4. 安装依赖库:项目根目录下通常会有一个requirements.txt文件,列出了所有需要的Python库。在项目目录下执行:
    pip install -r requirements.txt
    核心的requests库等就会被自动安装。

3.2 关键配置:安全获取认证信息

这是整个流程中最需要谨慎的一步。你需要向脚本提供你的B站登录凭证。

以使用Cookie为例(最常见的方式):

  1. 用Chrome或Edge浏览器登录B站网页版(www.bilibili.com)。
  2. F12打开开发者工具,切换到“网络”(Network)选项卡。
  3. 刷新B站主页,在开发者工具的网络活动列表里,找到任意一个指向api.bilibili.comwww.bilibili.com的请求,点击它。
  4. 在右侧的“标头”(Headers)信息中,找到“请求标头”(Request Headers)部分,在里面寻找名为Cookie的一长串字符串。
  5. 你需要从中提取出两个关键字段的值:
    • SESSDATA
    • bili_jct(有时也叫csrf)
  6. 在项目目录下,找到配置文件(通常是config.jsonconfig.ini或是一个单独的cookie.txt)。按照项目README.md的说明,将这两个值填入指定位置。

重要安全提醒Cookie等同于你的登录状态,绝对不能分享给任何人,也不要上传到任何公开平台。一旦泄露,他人可能操控你的账号。处理完配置文件后,可以考虑将其加入.gitignore或直接删除,避免误提交。

3.3 运行脚本与参数详解

配置好后,就可以运行脚本了。项目通常会提供一个主入口文件,比如main.pyunfollow.py

基础运行命令:

python main.py

但直接运行可能只会使用默认配置。更常见的做法是通过命令行参数来控制脚本行为。你需要仔细阅读项目的README来了解具体参数,一个典型的例子可能是:

# 先备份关注列表到本地文件,不执行取关 python main.py --backup-only # 取关超过365天未更新的UP主 python main.py --days 365 --execute # 取关粉丝数少于10000的UP主 python main.py --min-followers 10000 --execute # 从文件读取特定UID列表进行取关 python main.py --file uids_to_unfollow.txt --execute

参数解析:

  • --backup-only:仅备份,安全第一,强烈建议先执行此操作。
  • --days 365:设置筛选条件为“最后更新天数大于365天”。
  • --min-followers 10000:设置筛选条件为“粉丝数小于10000”。
  • --execute关键参数。不加这个参数,脚本通常只进行“模拟运行”,即打印出将要取关的名单,但不会真正发送请求。加上它,才会执行真实的取关操作。这给了你最后检查和反悔的机会。
  • --file:指定一个文本文件,每行一个UID,对这些UID进行精准操作。

运行后,脚本会输出详细的日志,告诉你它获取了多少个关注,根据条件筛选出了多少个,以及即将对哪些UP主进行操作。在最终确认前,请务必仔细核对这份名单。

4. 进阶使用与自定义筛选逻辑

4.1 理解数据备份文件

执行备份后,你会得到一个本地文件,比如followings.json。用文本编辑器打开它,你会看到结构化的数据。理解这个结构,是进行深度自定义筛选的基础。

一个简化后的JSON条目可能长这样:

{ "mid": 123456789, "name": "某个UP主", "sign": "这是他的个性签名...", "follower": 150000, "last_update_time": "2023-10-01 15:30:00" }
  • mid: UP主的唯一ID,是取关操作的依据。
  • name: 昵称。
  • follower: 粉丝数。
  • last_update_time: 最后发布动态/视频的时间。

有了这些数据,你就可以发挥创意了。比如,你可以写一个简单的Python脚本,读取这个JSON文件,然后:

  • 找出粉丝数在10万到50万之间的UP主。
  • 找出个性签名(sign)里包含某个关键词(如“游戏”、“编程”)的UP主。
  • 结合多个条件进行复杂筛选。

4.2 修改源码实现个性化规则

如果你不满足于项目自带的几个筛选条件,最好的办法就是直接修改源代码。这需要一些Python基础。

通常,筛选逻辑集中在一个函数里,比如叫filter_followings(following_list, criteria)。你可以找到这个函数,在里面添加自己的判断逻辑。

举例:你想取关所有“最后更新在周末”的UP主(假设你只想看工作日的更新)。

  1. 在备份的数据中,last_update_time是字符串,你需要用Python的datetime库将其转换为日期对象。
  2. 判断该日期对象的星期几(weekday()方法,周一为0,周日为6)。
  3. 如果星期几的值大于等于5(即周六或周日),则将此UP主加入待取关列表。

这就需要你阅读源码,找到合适的位置插入几行代码。虽然有一定门槛,但这是将工具完全“驯服”为你所用的关键一步。

5. 风险规避、伦理考量与常见问题

5.1 潜在风险与安全措施

  1. 账号安全风险

    • Cookie泄露:如前所述,这是最大风险。务必在私人环境中操作,操作完成后及时清理包含Cookie的配置文件。
    • 滥用风险:不要频繁、大规模地执行取关操作。过于异常的行为模式可能触发B站的风控机制,导致账号被暂时限制功能(如无法关注他人)。建议分批进行,每次操作间隔一段时间。
  2. 数据误操作风险

    • 无备份操作:绝对不要在未备份完整关注列表前执行任何--execute操作。
    • 条件误设:仔细检查你的筛选条件。例如,--min-followers 10000的意思是“粉丝数小于10000”,如果你本意是想保留小UP主,这个条件就完全反了。务必先使用模拟模式(不加--execute)验证输出结果。
  3. 项目代码风险

    • 第三方依赖:确保从官方渠道克隆项目,并检查requirements.txt中的库是否来自可信源。
    • 代码审查:如果你懂Python,花几分钟浏览一下核心代码,特别是处理认证和发送请求的部分,确保没有可疑的、向外部服务器发送你个人数据的代码。

5.2 使用伦理与社区礼仪

这是一个灰色地带的工具。虽然技术中立,但使用方式体现了你的态度。

  • 尊重创作者:取关是一个正常的用户行为。但如果你是因为某个UP主一期视频不合意就批量取关,或许可以更宽容一些。这个工具更适合清理那些确实已经停止活动你长期不感兴趣的账号。
  • 勿用于恶意行为:严禁编写脚本对特定UP主进行“关注-取关”的刷屏骚扰,这是明确的违规行为。
  • 理解工具局限:它只是效率工具,不能替代你的判断。哪些内容对你有价值,最终取决于你。

5.3 常见问题与排查实录

在实际操作中,你可能会遇到以下问题:

问题现象可能原因解决方案
运行脚本报错ModuleNotFoundError: No module named 'requests'Python依赖库未安装在项目目录下执行pip install -r requirements.txt
脚本能运行,但获取关注列表为空或失败1. Cookie过期或无效
2. 网络问题
3. B站API接口变更
1. 重新获取最新的Cookie
2. 检查网络连接
3. 查看项目Issues页面,可能接口已更新,需要等待开发者修复或手动修改API URL
模拟运行正常,但加--execute后取关失败1. 缺少bili_jct(CSRF Token)
2. 风控限制
1. 确保配置中包含了正确的bili_jct
2. 暂停操作,24小时后再试,或尝试更换网络环境(如从家用宽带切换到手机热点)
备份文件乱码或无法打开文件编码问题尝试用支持UTF-8编码的编辑器(如VS Code, Notepad++)打开,或在脚本中指定写入文件时的编码为utf-8
筛选条件不生效命令行参数格式错误或代码逻辑有误仔细检查命令拼写,阅读python main.py --help查看正确用法。对于自定义代码,添加打印语句调试筛选逻辑。

个人实操心得:

  1. 分批次是王道:不要一次性对几百个UP主执行取关。我自己的策略是:先筛选出“2年以上未更新”的,执行一批。过几天,再筛选“1-2年未更新”的。这样既安全,也给风控系统一个“缓冲”印象。
  2. 备份文件是金矿:那个JSON备份文件别删。我有时会用它来做数据分析,比如用Excel打开,看看我关注最多的分区是哪个,平均关注时长是多久,挺有意思的。
  3. 关注“取关”后的体验:清理之后,你的B站动态流会变得非常干净。这时,你可以更有意识地重新关注那些真正产出高质量、对你有价值的UP主。工具帮你完成了“破”,而“立”的部分,需要你更主动地去发现和选择。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 20:13:02

Claude Code用户如何配置Taotoken解决密钥不稳定与额度问题

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Claude Code用户如何配置Taotoken解决密钥不稳定与额度问题 对于频繁使用Claude Code进行编程辅助的开发者来说,一个稳…

作者头像 李华
网站建设 2026/5/18 20:10:14

命令行工具amem:高效管理.po文件,提升i18n开发自动化

1. 项目概述:一个被低估的本地化开发工具最近在折腾一个老项目的本地化部署,又遇到了那个熟悉又头疼的问题:如何高效地管理不同语言环境下的字符串资源?相信很多做过国际化(i18n)或多语言支持的开发者都深有…

作者头像 李华
网站建设 2026/5/18 20:10:13

智能交互引擎架构解析:从NLU到NLG的模块化设计与工程实践

1. 项目概述与核心价值最近在开源社区里,一个名为YoungBoy0048/tulingx的项目引起了我的注意。乍一看这个标题,它像是一个普通的个人仓库,但当你点进去,结合其描述和代码结构,你会发现它远不止于此。这其实是一个围绕“…

作者头像 李华
网站建设 2026/5/18 20:07:13

如何用BS-RoFormer实现SOTA级别的音乐源分离效果

如何用BS-RoFormer实现SOTA级别的音乐源分离效果 【免费下载链接】BS-RoFormer Implementation of Band Split Roformer, SOTA Attention network for music source separation out of ByteDance AI Labs 项目地址: https://gitcode.com/gh_mirrors/bs/BS-RoFormer 你是…

作者头像 李华