哔哩哔哩自动批量删除抽奖动态解析篇(一)

本文的分析过程可能需要读者了解一点前后端数据交互和逆向分析的思路和基础,由于本人是新手,自己也处于摸索学习阶段,说的不对或者不好的地方敬请谅解。

一、删除动态流程分析

B站每条动态无论是转发他人的动态还是自己原创发布的动态都有一个“id_str”索引值,B站服务器根据该索引进行对动态进行“增删改查(csrf)”,因此我们删除动态的流程大致可以按以下顺序操作:

  1. 获取自己所有动态的索引“id_str”;
  2. 若为转发的动态,每条动态数据里会有一个orig的字典,字典里也有一个id_str记录你转发的原动态索引,下文以“orig_id_str”指代;
  3. 我们根据“orig_id_str”获取原官方抽奖动态的数据信息,其中官方抽奖动态有一个“lottery_time”记录开奖时间,我们以把它与现在的时间作比较,如果早于现在,那说明已开奖,反之则为等待开奖;
  4. 若转发的原动态已经开奖,我们通过调用删除动态的api接口remove结合自己发布的动态“id_str”索引进行删除,由于是删除自己的动态,肯定需要对自己账号信息进行验证,这一点通过网页cookie可以实现

根据上述流程,结合自己在哔哩哔哩的摸索过程,我给自己画了一个思维导图,(思维导图只是记录自己的思路过程,主要自己看,了解自己下一步目标,每个人的思路不同,因此其他人可能看不明白,不喜忽喷)
在这里插入图片描述

二、获取自己发布的动态列表数据接口

1、找到数据api接口

所有网站页面基本都是前端调用服务器端的api接口获取数据进行页面渲染。上文已经说到,每条B站动态都有一个“id_str”索引,我们数一下就能发现每次动态列表加载更新都是12条数据。我们第一步要做的就是获得这个api接口链接。
首先进入自己的动态列表,通过键盘“F12”键查看网页源代码信息,不了解的客户可以自行查询功能介绍,这里不过多赘述。刷新页面,此时我们可以看到有很多网络请求,我们从一众请求中找到服务器响应response中带有12条"id_str"的网络请求
在这里插入图片描述
在这里插入图片描述
通过上述6步操作,你可以获得一段脚本。这里给大家介绍一个网站Convert curl commands to Python, JavaScript and more此网站后续还有用,建议收藏到书签里。
进入网站后将你复制的脚本粘贴进去,你会获得一份可以直接执行的python代码,将代码复制到你的pycharm里运行输出结果就能看到服务器响应返回的12条动态数据,其中就有我们需要的“id_str”索引和转发的原动态的“id_str”索引
在这里插入图片描述
通过pychram执行代码,输出response我们可以看到输出的内容和我们在网页看到的12条动态资料一模一样,说明我们成功了
在这里插入图片描述

2、加载更多动态列表

我们下拉动态栏,重复上述操作,找到新的api接口(可以通过“Ctrl+F”健在网络响应中输入第一次找到的api接口信息“polymer/web-dynamic/v1/feed/space?offset&host_mid”快速找到新的api接口),复制新脚本生成新的python代码,与第一次的代码比较,我们发现第二次代码与第一次代码api接口参数主要以下三点有区别

  • offset
  • w_rid
  • wts

其中接触过数据库的读者可能一眼可以看出offset是数据库分页查找的参数,我们可以通过控制变量法逐一排查哪个参数影响查询结果。事实证明,只有offset会影响分页结果,w_rid与wts不变化也能正常查询,而其中offset的值正是我们首次查询的12条动态中最后一条动态的id_str索引,我们只需要每次更新offset为最新一次查找的12条动态末尾动态的id_str索引值即可查询到全部的动态。

三、代码思路及实现

  1. 获取首次动态列表,获取以下数据,由于id_str与orig_id_str有对应关系,因此建议使用键值对的方式保存每条动态的信息,并将所有动态保存为列表:
    - id_str:需保存
    - orig_id_str:orig中的id_str,记录转发的动态的索引,需保存
    - has_more:判断是否还有更多的动态
    - offset:下次查找的偏移量
  2. 判断has_more是否为True,意味着还有更多动态,更新api接口中的offset参数更新数据,直到has_more为false
#用于生成每个动态对象,带有id_str和orig_str属性,后续代码改进需要更多参数方便添加
class Idstr():def __init__(self,id_str,orig_id_str):self.id_str = id_strself.orig_id_str = orig_id_strdef getid_strList():#获取首次动态列表response = requests.get(f'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?offset&host_mid={host_mid}&timezone_offset=-480&platform=web&features=itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,forwardListHidden,ugcDelete,onlyfansQaCard&web_location=333.999&dm_img_list=[%7B%22x%22:1254,%22y%22:1465,%22z%22:0,%22timestamp%22:69,%22k%22:83,%22type%22:0%7D,%7B%22x%22:1192,%22y%22:-222,%22z%22:6,%22timestamp%22:328,%22k%22:123,%22type%22:0%7D]&dm_img_str=V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ&dm_cover_img_str=QU5HTEUgKEludGVsLCBJbnRlbChSKSBVSEQgR3JhcGhpY3MgKDB4MDAwMDhBNTYpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKEludGVsKQ&dm_img_inter=%7B%22ds%22:[%7B%22t%22:0,%22c%22:%22%22,%22p%22:[57,19,19],%22s%22:[39,5076,5194]%7D],%22wh%22:[3660,5940,36],%22of%22:[54,108,54]%7D&x-bili-device-req-json=%7B%22platform%22:%22web%22,%22device%22:%22pc%22%7D&x-bili-web-req-json=%7B%22spm_id%22:%22333.999%22%7D&w_rid=8e093107e54b60fd35b846430c892e8e&wts=1726583398',cookies=cookies,headers=headers,).json()data = response['data']id_strList = []  #保存动态列表参数值flag = Truewhile flag:items = data['items']for item in items:if item.get('orig'):#因为抽奖动态都是转发的,我们原创的动态属于非转发,不会有orig数据,在此过滤掉,不做删除id_str = item['id_str']orig_id_str = item['orig']['id_str']new_idstr = Idstr(id_str,orig_id_str)#生成id_str对象id_strList.append(new_idstr)#将对象保存进列表offset = data['offset']#获取offset的值,以便获得后续的动态链接response = requests.get(f'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?offset={offset}&host_mid={host_mid}&timezone_offset=-480&platform=web&features=itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,forwardListHidden,ugcDelete,onlyfansQaCard&web_location=333.999&dm_img_list=[%7B%22x%22:1254,%22y%22:1465,%22z%22:0,%22timestamp%22:69,%22k%22:83,%22type%22:0%7D,%7B%22x%22:1192,%22y%22:-222,%22z%22:6,%22timestamp%22:328,%22k%22:123,%22type%22:0%7D]&dm_img_str=V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ&dm_cover_img_str=QU5HTEUgKEludGVsLCBJbnRlbChSKSBVSEQgR3JhcGhpY3MgKDB4MDAwMDhBNTYpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKEludGVsKQ&dm_img_inter=%7B%22ds%22:[%7B%22t%22:0,%22c%22:%22%22,%22p%22:[57,19,19],%22s%22:[39,5076,5194]%7D],%22wh%22:[3660,5940,36],%22of%22:[54,108,54]%7D&x-bili-device-req-json=%7B%22platform%22:%22web%22,%22device%22:%22pc%22%7D&x-bili-web-req-json=%7B%22spm_id%22:%22333.999%22%7D&w_rid=8e093107e54b60fd35b846430c892e8e&wts=1726583398',cookies=cookies,headers=headers,).json()data = response['data']if data['has_more']:#判断是否是最后一批动态数据,如果不是,循环继续,直到has_more为falsecontinueelse:flag = False #当循环为false时,说明是最后一批动态数据了,我们将本次获得的动态数据加入列表就能退出循环了items = data['items']for item in items:if item.get('orig'):id_str = item['id_str']orig_id_str = item['orig']['id_str']new_idstr = Idstr(id_str, orig_id_str)id_strList.append(new_idstr)sleep_time = random.randint(1, 4)#随机生成数字1,2,3,4time.sleep(sleep_time)#由于爬虫速度较快,短时间发送大量请求极易被服务器判定为恶意攻击,因此随机停顿1~4秒模拟是人工操作return id_strList

由于我们在中间过程通过返回的数据是否含有orig字段数据过滤了自己发原创发布的动态,最后返回的列表id_strList仅为涉及转发的动态列表。到这里我们第一步获取动态列表的数据就完成了。下一节我们对获取的动态列表进行判断,判断原抽奖动态的开奖状态。

哔哩哔哩自动批量删除抽奖动态——使用篇
哔哩哔哩自动批量删除抽奖动态解析篇(一)
哔哩哔哩自动批量删除抽奖动态解析篇(二)
哔哩哔哩自动批量删除抽奖动态解析篇(三)
哔哩哔哩自动批量删除抽奖动态解析篇(四)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147811.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯1.小蓝的漆房

样例输入 2 5 2 1 1 2 2 1 6 2 1 2 2 3 3 3样例输出 1 2 import math import os import sys tint(input())#执行的次数 for j in range(t):n,kmap(int,input().split())#n为房间数 k为一次能涂的个数alist(map(int,input().split()))#以列表的形式存放房间的颜色maxvaluemath…

MySQL数据库的增删改查以及基本操作分享

1、登录MySQL数据库 首先找到你安装MySQL数据库的目录,然后在终端打开该目录,输入以下命令 mysql -u root -p然后输入密码就可以登录数据库了,看到如下页面就是登陆成功了 ***注意在终端操纵数据库时所有语句写完之后一定要加 &#xff1…

【基础算法总结】模拟篇

目录 一,算法介绍二,算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三,算法总结 一,算法介绍 模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作…

【记录】大模型|Windows 下 Hugging Face 上的模型的通用极简调用方式之一

这篇文是参考了这篇,然后后来自己试着搭了一下,记录的全部过程:【翻译】Ollama|如何在 Ollama 中运行 Hugging Face 中的模型_ollama 导入 huggingface-CSDN 博客 另外还参考了这篇:无所不谈,百无禁忌,Win11 本地部署无…

【大模型】AutoDL部署AI绘图大模型Stable Diffusion使用详解

目录 一、前言 二、AI绘图大模型概述 2.1 AI绘图大模型介绍 2.2 AI绘图大模型特点 2.3 AI绘图大模型优势 三、主流的AI绘图大模型介绍 3.1 Midjourney 3.1.1 Midjourney介绍 3.1.2 Midjourney功能特点 3.1.3 Midjourney使用场景 3.2 Stable Diffusion 3.2.1 Stable …

【WRF运行第二期(Ubuntu)】ARWpost安装

WRF运行第二期:ARWpost安装 1 ARWpost介绍2 ARWpost安装2.1 ARWpos_V3安装前准备2.2 安装ARWpos2.3 修改Makefile文件2.4 修改configure.arwp文件2.5 生成可执行文件EXE2.6 修改namelist.ARWpost 参考 1 ARWpost介绍 ARWpost 是WRF模型后处理程序之一,用…

前端组件库Element UI 的使用

一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…

技术周总结 09.16~09.22 周日(架构 C# 数据库)

文章目录 一、09.16 周一1.1)问题01: 软件质量属性中"质量属性场景"、"质量属性环境分析"、"质量属性效用树"、"质量属性需求用例分析"分别是什么?1.2)问题02: 软件质量属性中…

MOS工作的三种状态及其分析——亚阈值区(截至区),深三极管区(又叫深线性区)和饱和区

1.MOS工作的三种状态及其分析——亚阈值区(截至区),深三极管区(又叫深线性区)和饱和区。 1.1亚阈值区(现代深亚微米工艺下的部分截至区) 现代深亚微米工艺下,亚阈值区是指在Vgs小于阈…

WebLogic远程代码执行漏洞CVE-2020-14882

1.环境搭建 cd vulhub-master/weblogic/CVE-2020-14882 docker-compose up -d 2.登录后台 使用以下url绕过登录认证 主页 - base_domain - WLS 控制台http://47.121.211.205:7001/console/css/%252e%252e%252fconsole.portal 3.在目标服务器创建文件 http://47.121.211.…

Linux-gcc/g++

系列文章目录 C语言中的编译和链接 文章目录 系列文章目录一、编译过程gcc如何完成过程在这里涉及到一个重要的概念:函数库 二、动态库、静态库2.1 函数库一般分为静态库和动态库两种。 三、gcc选项gcc选项记忆 一、编译过程 具体过程在这一片c语言文章中讲解过:C语言中的编…

【记录】Excel|不允许的操作:合并或隐藏单元格出现的问题列表及解决方案

人话说在前:这篇的内容是2022年5月写的,当时碰到了要批量处理数据的情况,但是又不知道数据为啥一直报错报错报错,说不允许我操作,最终发现是因为存在隐藏的列或行,于是就很无语地写了博客,但内容…

STM32系统时钟

时钟为单片机提供了稳定的机器周期,从而使我们的系统能够正常的运行 时钟就像我们人的心脏,一旦有问题就整个都会崩溃 stm32有很多外设,但不是所有的外设都使用同一种时钟频率工作,比如我们的内部看门狗和RTC 只要30几k的频率就…

【PLW003】设备器材云端管理平台v1.0(SpringBoot+Mybatis+NodeJS+MySQL前后端分离)

设备器材云端管理平台是一种专为各种设备(如教育行业中的实验设备、建筑行业中的施工设备等)租赁或共享孵化的数字化管理工具,旨在融合数字化手段,提高各种设备器材的管理效率、 确保设备的安全稳定运行,并优化资源使用…

【Godot4.3】基于状态切换的游戏元素概论

提示 本文的设想性质比较大,只是探讨一种设计思路。完全理论阶段,不可行就当是闹了个笑话O(∩_∩)O哈哈~但很符合我瞎搞的气质。 概述 一些游戏元素,其实是拥有多个状态的。比如一个宝箱,有打开和关闭两个状态。那么只需要设定两个状态的图…

日志系统第五弹:同步日志器模块

日志系统第五弹:同步日志器模块 一、Logger类的设计1.功能2.如何打印日志3.设计 - - - 成员变量1.日志输出限制等级2.资源整合3.唯一标识4.互斥锁 4.设计 - - - 成员函数1.对外的日志打印接口2.抽象的日志实际落地接口3.其他接口 5.Logger类的框架 二、Logger类的实…

springboot地方特色美食分享系统-计算机毕业设计源码02383

摘要 本论文主要论述了如何使用SpringBoot技术开发一个地方特色美食分享系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述地方特色美食分享系统的当前背景以…

DHCP服务器搭建

1. DHCP工作原理 DHCP动态分配IP地址,客户端广播,服务端单播 2. DHCP服务器安装 2.1 安装DHCP # yum install -y dhcp-server 2.2 修改配置文件 # cd /etc/dhcp/ # ls # vi dhcpd.conf dhcpd.conf 主配置文件 第一行:全局dhcp服务器地…

240922-Ollama使用Embedding实现RAG

A. 最终效果 B. 参考代码 # [嵌入模型 Ollama 博客 - Ollama 中文](https://ollama.org.cn/blog/embedding-models)# 步骤1:生成嵌入import ollama import chromadbdocuments ["Llamas are members of the camelid family meaning theyre pretty closely re…

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目: 题解: func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…