分享-如何在b站中找到弹幕发送者是谁
前言
总所周知bilibili是没有办法直接查看弹幕的发送者的,这使得当我们看到一些nt弹幕的时候虽然生气,却无可奈何,但是B站是可以屏蔽某个用户发送的弹幕的,这说明数据接口里肯定有用户信息,由于最近在学爬虫,所以我想先找找弹幕接口,分析下里面的数据。
找接口
找接口当然是随便打开一个视频然后F12啦,可是当我找了两圈后我傻眼了,没找到啊。。得,不能把时间浪费在这种事情上,果断打开百度,不出所料,找到了如下的两个接口,都是XML格式网页
这里面的cid是一种每个视频独有的数字,也就是每一P都有一个cid,查找cid可以打开网页然后F12,再ctrl+f搜索cid,一般八九位数的就是cid了。这里我找到了一个接口,可以通过aid找到cid
1 https://www.bilibili.com/widget/getPageList?aid=+aid
分析数据
弹幕数据是获取到了,那么我们就要从这一堆数据中分析他们的用途了
这里大概能得到两个信息,其中第6个数据为时间戳,第8个数据为用户uid的某种加密方式。经查询得到这是用户uid经过crc32校验得到的结果转为16进制数,所以只能通过uid得到对于的校验码,无法反推。。似乎只能通过彩虹表的方式查找数据了?那么这串8位16进制的数字在数据库中要用什么方式保存呢?
选择似乎有varchar和bigint,由于B站有差不多6亿个用户,在6亿个数据中查找想要的字符串那速度必然很慢(但有人经测试得到varchar型数据和bigint型数据查找速度其实差的不多?)
就在我决定用bigint储存数据时,我突然想到,8位16进制那就是2的32次方,int型的储存上限时2的31次方,如果用无符号的方式保存正好是2的32次方,也就是能储存到0xffffffff这么大的数据,正好满足要求。于是果断换成无符号int,与之对应的id也为无符号int,并将crc32b编码过后的数据作为主键,制成彩虹表存入我的服务器内。
(粗略的算了一下,6亿数据就是需要27G左右的空间…而我的服务器一共才40G的大小…)
做成网页供大家使用
接下来的操作似乎就水到渠成了,写了个python脚本,该python脚本接受2个参数,视频cid和想要搜索的弹幕关键字,返回用户发送的弹幕,用户的crc32b编码,时间戳。然后用php的exec函数执行python代码,并通过搜索数据库找出用户的uid,通过php返回json格式数据给前端。
python代码(写的很烂)
import requests
from bs4 import BeautifulSoup
import re
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding=‘utf-8’)
req = requests.get(‘https://comment.bilibili.com/’+sys.argv[1]+’.xml’)
req.encoding = req.apparent_encoding
soup = BeautifulSoup(req.text, ‘html.parser’).find_all(name=‘d’)
result = “”
for i in soup:
s = re.sub(’<(.*?)>’, ‘’, str(i))
index = 0
if(len(sys.argv[2])>0):
index = s.find(str(sys.argv[2]))
if(index!=-1):
result+=str(i).split(",")[6]+","+s+","+str(i).split(",")[4]+","
print(result)
效果展示
前端代码就是随便写的~至少功能实现了嘛
这里说一下为什么是NULL,因为我的服务器还在可怜巴巴的往数据库内写入彩虹表数据。。预计需要4天~
今天加了个暴力破解的功能,避免了查询结果为NULL,但是相对的查询速度会非常慢。 最后!附上该工具的链接:点我
欢迎来我的个人主页玩~ YB的小屋
————————————————
版权声明:本文为CSDN博主「dlpu_fan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:http://gmail.mysxl.cn/
分享-如何在b站中找到弹幕发送者是谁相关推荐
- 如何在bilibili中查找弹幕发送者
文章最下面有工具链接! 前言 总所周知bilibili是没有办法直接查看弹幕的发送者的,这使得当我们看到一些nt弹幕的时候虽然生气,却无可奈何,但是B站是可以屏蔽某个用户发送的弹幕的,这说明数据接口里 ...
- 如何在R代码中找到一个值的行号
如何在R代码中找到一个值的行号? 例如: 在以下一组值中,如何在第4列中找到特定值的行号? 如何使用R代码命令找到列4中的值"1578"的行号. > mydata_2sex ...
- B站一键查询视频/分P视频/番剧的弹幕发送者
近几年因为B站的门槛越来越低,时常会看到一些让人眼前一亮的弹幕.直接举报拉黑这种做法显然已经太便宜了.. 网上大部分查询工具时效性已经过了或者有局限性,所以我打算自己写一款能通过视频.分P视频.番剧来 ...
- 怎么用python发弹幕_[python]bilibili弹幕发送者查询器软件
简介: 一款用于查询bilibili弹幕发送者的软件,输入视频号(需要保证视频有效且有弹幕)后对弹幕池中的弹幕按照发送时间(从新到旧的顺序)进行查询.操作简单,需要联网使用. 查询结果以uid格式展示 ...
- 前端大牛吐血分享:如何在 Web 开发中找到第一份工作?
对于初入门槛的开发者们来说,如何获得第一份工作至关重要.本文的作者总结了自己找工作的实战经验,希望对各位开发者们提供些帮助. 作者 | Nicole Peery 译者 | 谭开朗,责编 | 郭芮 出品 ...
- 如何在 Web 开发中找到第一份工作?
对于初入门槛的开发者们来说,如何获得第一份工作至关重要.本文的作者总结了自己找工作的实战经验,希望对各位开发者们提供些帮助. 作者 | Nicole Peery 译者 | 谭开朗,责编 | 郭芮 出品 ...
- android 弹幕动画,实例解析如何在Android应用中实现弹幕动画效果
在B站或者其他视频网站看视频时,常常会打开弹幕效果,边看节目边看大家的吐槽.弹幕看起来很有意思,今天我们就来实现一个简单的弹幕效果. 从直观上,弹幕效果就是在一个ViewGroup上增加一些View, ...
- 为什么B站中的弹幕可以不遮挡人物
上班逛B站时摸鱼时,看到了满屏的弹幕,而且还不挡脸,突然心血来潮来看看它是怎么实现的? 不难发现弹幕其实它就是有一个蒙版层div,遮挡在视频组件的上方,z-index层级设置的比较高(这里是11),v ...
- C语言 输出重复序列的序号,如何在FASTA序列中找到反向重复模式?
我是Python和生物信息学的新手,但我正在通过rosalind.info网站学习两种方法.您可以使用后缀树执行此操作.后缀树(见 http://en.wikipedia.org/wiki/Suffi ...
最新文章
- DS博客作业04--树大作业
- 朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型
- opencv(4)图像滤波
- PySide教程:一个简单的点击“.NET研究”按钮示例
- Leetcode初级算法(链表篇)
- YunYang1994/tensorflow-yolov3 训练自己的数据集
- 信息系统项目管理师-常用技术标准考点笔记
- Event/window.Event属性和方法
- 智能家居简单实现---使用ESP8266简单实现和APP通讯
- Python菜鸟入门:day12编程学习
- Linux启动过程综述(转)
- 江苏职称计算机考试错做题,江苏省职称计算机考试word注意点.doc
- matlab根据数值大小聚类,[matlab聚类分析]请教高手:用matlab做聚类分析,节点数多于30个怎么画聚类图啊?...
- vue+element+springboot前后端分离项目整合pageoffice实现在线编辑Word和Excel跟签章等
- 44个“区块链+AI”应用场景分析, 你觉得还能更全吗?
- 用脑子说话,用心服务
- 如何实现点击收藏,图标变色;再次点击,取消收藏,图标变回原来的颜色,且能把已收藏的项发送请求给后端
- 基于粒子群优化的MPPT控制
- 从X240电脑看传统企业的创新陷阱
- DynaTrace Ajax Edition:IE浏览器性能分析工具