Python自动化脚本实现B站关注列表批量管理:原理、实践与风险规避
1. 项目概述与核心价值最近在整理自己的B站关注列表时发现了一个挺普遍的问题关注了太多UP主但很多已经很久不更新或者内容方向已经不是我感兴趣的了。手动一个个去清理既费时又费力。就在我琢磨有没有什么自动化工具能帮忙的时候发现了sunrisever/bilibili-follow这个项目。简单来说它是一个用Python编写的脚本工具核心功能就是帮你批量管理B站Bilibili的关注列表比如一键取关所有UP主或者根据特定条件如最后更新日期、粉丝数进行筛选后取关。这听起来可能有点“暴力”但对于想要快速清理关注列表、重新构建信息流的人来说它确实是个利器。我自己就是一个深度B站用户关注数一度超过500每天动态里充斥着大量我不再感兴趣的内容真正想看的反而被淹没了。这个项目正好切中了这个痛点——它不是官方功能而是通过技术手段实现的第三方自动化方案。它的价值在于将繁琐、重复的人工操作转化为一次性的脚本执行解放你的时间。当然使用它需要一定的技术门槛你需要能运行Python脚本并且理解其背后的逻辑和潜在风险这也是我接下来要详细拆解的内容。2. 核心功能与实现原理深度解析2.1 功能全景不止于“一键取关”很多人第一眼看到这个项目会以为它只是个“一键全取关”的粗暴工具。实际上它的功能设计考虑到了多种使用场景远比想象中精细。核心功能模块包括批量取关这是基础功能可以一次性取关当前账号的所有关注用户。这是清理“废墟”的最快方式。条件筛选取关这才是项目的精髓。你可以设定规则让脚本智能地决定取关谁。常见的筛选条件有最后更新时间例如取关超过1年未更新的UP主。这非常适合清理那些已经“弃坑”的创作者。粉丝数量例如只取关粉丝数低于一定阈值如1万的UP主或者反过来只保留大UP主。这可以用来优化关注列表的“质量”。关注时间取关最早关注的一批UP主可能你的兴趣已经发生了转移。自定义名单通过一个文本文件输入特定的UP主UID用户唯一ID进行精准取关或保留。关注列表备份在执行任何破坏性操作如取关前脚本会先获取你完整的关注列表并保存为本地文件如JSON或CSV格式。这份备份至关重要一是用于后续的筛选分析二是一旦误操作你还有机会手动加回来。操作日志与安全确认脚本在执行每一步尤其是进行取关操作前通常会要求二次确认并输出详细的日志告诉你即将对谁进行操作。这避免了因配置错误导致的“灾难”。2.2 技术原理模拟请求与API调用这个项目本身不涉及复杂的算法其技术核心在于对B站Web端或移动端API的逆向工程与模拟调用。简单说就是让Python脚本模仿你的浏览器或B站App去完成“登录”、“查询关注列表”、“发送取关请求”这一系列动作。实现流程可以拆解为以下几个关键步骤身份认证登录这是第一步也是最关键的一步。脚本需要获得你账户的权限。早期可能通过账号密码模拟登录但这种方式极不稳定且涉及敏感信息风险很高。现在更主流、更安全的方式是使用Cookie或Access Token。Cookie你可以在浏览器登录B站后从开发者工具中复制出关键的Cookie字段如SESSDATA、bili_jct。脚本使用这些Cookie就能让B站服务器认为请求来自已登录的你的浏览器。Access Token通过OAuth2等授权流程获取的令牌权限更清晰但获取流程对普通用户稍复杂。项目文档通常会详细指导你如何安全地获取这些凭证并强调切勿泄露。数据获取抓取关注列表登录后脚本会向B站关注列表的API接口发送HTTP请求。这个接口返回的数据通常是结构化的JSON包含了每个关注UP主的详细信息UID、用户名、粉丝数、最后动态时间、个性签名等。脚本会解析这些数据并保存在本地供后续筛选使用。逻辑处理条件筛选脚本读取本地备份的关注列表数据根据你预设的规则如“最后更新时间早于2022年1月1日”进行过滤生成一个“待取关列表”。执行动作发送取关请求脚本遍历“待取关列表”对列表中的每一个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或以上版本并确保pipPython包管理器可用。安装Python前往Python官网下载对应操作系统的安装包安装时务必勾选“Add Python to PATH”。验证安装打开命令行Windows的CMD或PowerShellmacOS/Linux的Terminal输入python --version和pip --version能显示版本号即成功。获取项目代码由于项目托管在代码托管平台你需要使用git命令克隆或者直接下载ZIP压缩包。# 使用git克隆推荐 git clone https://github.com/sunrisever/bilibili-follow.git cd bilibili-follow如果不用git可以在项目页面找到“Download ZIP”按钮下载解压后进入目录。安装依赖库项目根目录下通常会有一个requirements.txt文件列出了所有需要的Python库。在项目目录下执行pip install -r requirements.txt核心的requests库等就会被自动安装。3.2 关键配置安全获取认证信息这是整个流程中最需要谨慎的一步。你需要向脚本提供你的B站登录凭证。以使用Cookie为例最常见的方式用Chrome或Edge浏览器登录B站网页版www.bilibili.com。按F12打开开发者工具切换到“网络”Network选项卡。刷新B站主页在开发者工具的网络活动列表里找到任意一个指向api.bilibili.com或www.bilibili.com的请求点击它。在右侧的“标头”Headers信息中找到“请求标头”Request Headers部分在里面寻找名为Cookie的一长串字符串。你需要从中提取出两个关键字段的值SESSDATAbili_jct(有时也叫csrf)在项目目录下找到配置文件通常是config.json、config.ini或是一个单独的cookie.txt。按照项目README.md的说明将这两个值填入指定位置。重要安全提醒Cookie等同于你的登录状态绝对不能分享给任何人也不要上传到任何公开平台。一旦泄露他人可能操控你的账号。处理完配置文件后可以考虑将其加入.gitignore或直接删除避免误提交。3.3 运行脚本与参数详解配置好后就可以运行脚本了。项目通常会提供一个主入口文件比如main.py或unfollow.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主假设你只想看工作日的更新。在备份的数据中last_update_time是字符串你需要用Python的datetime库将其转换为日期对象。判断该日期对象的星期几weekday()方法周一为0周日为6。如果星期几的值大于等于5即周六或周日则将此UP主加入待取关列表。这就需要你阅读源码找到合适的位置插入几行代码。虽然有一定门槛但这是将工具完全“驯服”为你所用的关键一步。5. 风险规避、伦理考量与常见问题5.1 潜在风险与安全措施账号安全风险Cookie泄露如前所述这是最大风险。务必在私人环境中操作操作完成后及时清理包含Cookie的配置文件。滥用风险不要频繁、大规模地执行取关操作。过于异常的行为模式可能触发B站的风控机制导致账号被暂时限制功能如无法关注他人。建议分批进行每次操作间隔一段时间。数据误操作风险无备份操作绝对不要在未备份完整关注列表前执行任何--execute操作。条件误设仔细检查你的筛选条件。例如--min-followers 10000的意思是“粉丝数小于10000”如果你本意是想保留小UP主这个条件就完全反了。务必先使用模拟模式不加--execute验证输出结果。项目代码风险第三方依赖确保从官方渠道克隆项目并检查requirements.txt中的库是否来自可信源。代码审查如果你懂Python花几分钟浏览一下核心代码特别是处理认证和发送请求的部分确保没有可疑的、向外部服务器发送你个人数据的代码。5.2 使用伦理与社区礼仪这是一个灰色地带的工具。虽然技术中立但使用方式体现了你的态度。尊重创作者取关是一个正常的用户行为。但如果你是因为某个UP主一期视频不合意就批量取关或许可以更宽容一些。这个工具更适合清理那些确实已经停止活动或你长期不感兴趣的账号。勿用于恶意行为严禁编写脚本对特定UP主进行“关注-取关”的刷屏骚扰这是明确的违规行为。理解工具局限它只是效率工具不能替代你的判断。哪些内容对你有价值最终取决于你。5.3 常见问题与排查实录在实际操作中你可能会遇到以下问题问题现象可能原因解决方案运行脚本报错ModuleNotFoundError: No module named requestsPython依赖库未安装在项目目录下执行pip install -r requirements.txt脚本能运行但获取关注列表为空或失败1. Cookie过期或无效2. 网络问题3. B站API接口变更1. 重新获取最新的Cookie2. 检查网络连接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查看正确用法。对于自定义代码添加打印语句调试筛选逻辑。个人实操心得分批次是王道不要一次性对几百个UP主执行取关。我自己的策略是先筛选出“2年以上未更新”的执行一批。过几天再筛选“1-2年未更新”的。这样既安全也给风控系统一个“缓冲”印象。备份文件是金矿那个JSON备份文件别删。我有时会用它来做数据分析比如用Excel打开看看我关注最多的分区是哪个平均关注时长是多久挺有意思的。关注“取关”后的体验清理之后你的B站动态流会变得非常干净。这时你可以更有意识地重新关注那些真正产出高质量、对你有价值的UP主。工具帮你完成了“破”而“立”的部分需要你更主动地去发现和选择。