如何在bilibili中查詢彈幕傳送者

2021-10-06 13:34:38 字數 1925 閱讀 3304

總所周知bilibili是沒有辦法直接檢視彈幕的傳送者的,這使得當我們看到一些nt彈幕的時候雖然生氣,卻無可奈何,但是b站是可以遮蔽某個使用者傳送的彈幕的,這說明資料介面裡肯定有使用者資訊,由於最近在學爬蟲,所以我想先找找彈幕介面,分析下裡面的資料。

這裡我找到了乙個介面,可以通過aid找到cid

已作廢)

新介面,引數可使用bvid)

彈幕資料是獲取到了,那麼我們就要從這一堆資料中分析他們的用途了

這裡大概能得到兩個資訊,其中第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的大小…)

import requests

from bs4 import beautifulsoup

import re

import io

import sys

buffer

,encoding=

'utf-8'

)req = requests.get(

''+sys.ar**[1]

+'.xml'

)soup = beautifulsoup(req.text,

'html.parser'

).find_all(name=

'd')

result =

""for i in soup:

s = re.sub(

'',''

,str

(i))

index =0if

(len

(sys.ar**[2]

)>0)

: index = s.find(

str(sys.ar**[2]

))if(index!=-1

):result+=

str(i)

.split(

",")[6

]+","+s+

","+

str(i)

.split(

",")[4

]+","print

(result)

前端**就是隨便寫的~至少功能實現了嘛

這裡說一下為什麼是null,因為我的伺服器還在可憐巴巴的往資料庫內寫入彩虹表資料。。預計需要4天~

今天加了個暴力破解的功能,避免了查詢結果為null,但是相對的查詢速度會非常慢。

歡迎來我的個人主頁玩~ yb的小屋

ionic如何在彈框寫HTML

首先我們先學習下如何跳 此方法中寫了幾個引數,則對應下面方法需要幾個引數,我們在html調取此方法 exitsystem 即可使用 exitsystem 此方法對應上面的引數 async presentalertexitsystem alertcontroller alertcontroller,m...

如何在linux中查詢檔案

find是最常見和最強大的查詢命令,你可以用它找到任何你想找的檔案。find 命令會在硬碟進行檢索,速度較慢。find 指定目錄 指定條件 指定動作 whereis命令只能用於可執行檔案的搜尋,只能查到一些特定檔案,而且whereis和locate執行機制一樣,也是從資料庫中查詢 var lib l...

如何在Solr中實現多core查詢?

size medium 基於solr或者elasticsearch提供的多核,多索引,多shard等查詢能力,一般都是由lucene提供的多索引查詢的功能演化而來的,這個功能在單機版的lucene裡面確實沒有發揮多大的威力,但是確是solrclourd,elasticsearch分布式集群查詢資料的...