Python脚本如何在bilibili中查找弹幕发送者


Posted in Python onJune 04, 2020

       总所周知bilibili是没有办法直接查看弹幕的发送者的,这使得当我们看到一些nt弹幕的时候虽然生气,却无可奈何,但是B站是可以屏蔽某个用户发送的弹幕的,这说明数据接口里肯定有用户信息,由于最近在学爬虫,所以我想先找找弹幕接口,分析下里面的数据。

找接口

       找接口当然是随便打开一个视频然后F12啦,可是当我找了两圈后我傻眼了,没找到啊。。得,不能把时间浪费在这种事情上,果断打开百度,不出所料,找到了如下的两个接口,都是XML格式网页

https://comment.bilibili.com/+cid
https://api.bilibili.com/x/v1/dm/list.so?oid=+cid

       这里面的cid是一种每个视频独有的数字,也就是每一P都有一个cid,查找cid可以打开网页然后F12,再ctrl+f搜索cid,一般八九位数的就是cid了。

       这里我找到了一个接口,可以通过aid找到cid

https://www.bilibili.com/widget/getPageList?aid=+aid

分析数据

       弹幕数据是获取到了,那么我们就要从这一堆数据中分析他们的用途了

Python脚本如何在bilibili中查找弹幕发送者

       这里大概能得到两个信息,其中第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)

效果展示

       前端代码就是随便写的~至少功能实现了嘛

Python脚本如何在bilibili中查找弹幕发送者Python脚本如何在bilibili中查找弹幕发送者

       这里说一下为什么是NULL,因为我的服务器还在可怜巴巴的往数据库内写入彩虹表数据。。预计需要4天~
       今天加了个暴力破解的功能,避免了查询结果为NULL,但是相对的查询速度会非常慢。

       最后!附上该工具的链接:点我

总结

到此这篇关于Python脚本如何在bilibili中查找弹幕发送者的文章就介绍到这了,更多相关bilibili弹幕发送者内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
一个超级简单的python web程序
Sep 11 Python
Python fileinput模块使用介绍
Nov 30 Python
浅谈Python程序与C++程序的联合使用
Apr 07 Python
使用Python发送各种形式的邮件的方法汇总
Nov 09 Python
Python 绘图和可视化详细介绍
Feb 11 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
对Python w和w+权限的区别详解
Jan 23 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
QML实现钟表效果
Jun 02 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
python函数超时自动退出的实操方法
Dec 28 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 #Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 #Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 #Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 #Python
python 实现图像快速替换某种颜色
Jun 04 #Python
python下对hsv颜色空间进行量化操作
Jun 04 #Python
Python-opencv实现红绿两色识别操作
Jun 04 #Python
You might like
用Flash图形化数据(一)
2006/10/09 PHP
PHP类的反射用法实例
2014/11/03 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
JS之小练习代码
2008/10/12 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
vue实现表格合并功能
2020/12/01 Vue.js
python提取页面内url列表的方法
2015/05/25 Python
python生成excel的实例代码
2017/11/08 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python处理写入数据代码讲解
2020/10/22 Python
支教自我鉴定
2014/01/18 职场文书
八项规定整改方案
2014/02/21 职场文书
六个一活动实施方案
2014/03/21 职场文书
企业安全标语
2014/06/07 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
无线电知识基础入门篇
2022/02/18 无线电