Python腳本如何在bilibili中查找彈幕發(fā)送者
總所周知bilibili是沒有辦法直接查看彈幕的發(fā)送者的,這使得當(dāng)我們看到一些nt彈幕的時候雖然生氣,卻無可奈何,但是B站是可以屏蔽某個用戶發(fā)送的彈幕的,這說明數(shù)據(jù)接口里肯定有用戶信息,由于最近在學(xué)爬蟲,所以我想先找找彈幕接口,分析下里面的數(shù)據(jù)。
找接口
找接口當(dāng)然是隨便打開一個視頻然后F12啦,可是當(dāng)我找了兩圈后我傻眼了,沒找到啊。。得,不能把時間浪費在這種事情上,果斷打開百度,不出所料,找到了如下的兩個接口,都是XML格式網(wǎng)頁
https://comment.bilibili.com/+cid
https://api.bilibili.com/x/v1/dm/list.so?oid=+cid
這里面的cid是一種每個視頻獨有的數(shù)字,也就是每一P都有一個cid,查找cid可以打開網(wǎng)頁然后F12,再ctrl+f搜索cid,一般八九位數(shù)的就是cid了。
這里我找到了一個接口,可以通過aid找到cid
https://www.bilibili.com/widget/getPageList?aid=+aid
分析數(shù)據(jù)
彈幕數(shù)據(jù)是獲取到了,那么我們就要從這一堆數(shù)據(jù)中分析他們的用途了
這里大概能得到兩個信息,其中第6個數(shù)據(jù)為時間戳,第8個數(shù)據(jù)為用戶uid的某種加密方式。經(jīng)查詢得到這是用戶uid經(jīng)過crc32校驗得到的結(jié)果轉(zhuǎn)為16進制數(shù),所以只能通過uid得到對于的校驗碼,無法反推。。似乎只能通過彩虹表的方式查找數(shù)據(jù)了?那么這串8位16進制的數(shù)字在數(shù)據(jù)庫中要用什么方式保存呢?
選擇似乎有varchar和bigint,由于B站有差不多6億個用戶,在6億個數(shù)據(jù)中查找想要的字符串那速度必然很慢(但有人經(jīng)測試得到varchar型數(shù)據(jù)和bigint型數(shù)據(jù)查找速度其實差的不多?)
就在我決定用bigint儲存數(shù)據(jù)時,我突然想到,8位16進制那就是2的32次方,int型的儲存上限時2的31次方,如果用無符號的方式保存正好是2的32次方,也就是能儲存到0xffffffff這么大的數(shù)據(jù),正好滿足要求。于是果斷換成無符號int,與之對應(yīng)的id也為無符號int,并將crc32b編碼過后的數(shù)據(jù)作為主鍵,制成彩虹表存入我的服務(wù)器內(nèi)。
(粗略的算了一下,6億數(shù)據(jù)就是需要27G左右的空間…而我的服務(wù)器一共才40G的大小…)
做成網(wǎng)頁供大家使用
接下來的操作似乎就水到渠成了,寫了個python腳本,該python腳本接受2個參數(shù),視頻cid和想要搜索的彈幕關(guān)鍵字,返回用戶發(fā)送的彈幕,用戶的crc32b編碼,時間戳。然后用php的exec函數(shù)執(zhí)行python代碼,并通過搜索數(shù)據(jù)庫找出用戶的uid,通過php返回json格式數(shù)據(jù)給前端。
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)
效果展示
前端代碼就是隨便寫的~至少功能實現(xiàn)了嘛
這里說一下為什么是NULL,因為我的服務(wù)器還在可憐巴巴的往數(shù)據(jù)庫內(nèi)寫入彩虹表數(shù)據(jù)。。預(yù)計需要4天~
今天加了個暴力破解的功能,避免了查詢結(jié)果為NULL,但是相對的查詢速度會非常慢。
最后!附上該工具的鏈接:點我
總結(jié)
到此這篇關(guān)于Python腳本如何在bilibili中查找彈幕發(fā)送者的文章就介紹到這了,更多相關(guān)bilibili彈幕發(fā)送者內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python 批量下載bilibili視頻的gui程序
- 利用python 下載bilibili視頻
- python中使用you-get庫批量在線下載bilibili視頻的教程
- Python爬蟲 bilibili視頻彈幕提取過程詳解
- Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能
- python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析
- python批量合成bilibili的m4s緩存文件為MP4格式 ver2.5
- Python破解BiliBili滑塊驗證碼的思路詳解(完美避開人機識別)
- Python實現(xiàn)bilibili時間長度查詢的示例代碼
- Python爬蟲爬取Bilibili彈幕過程解析
- python破解bilibili滑動驗證碼登錄功能
- 寫一個Python腳本自動爬取Bilibili小視頻
相關(guān)文章
利用python腳本提取Abaqus場輸出數(shù)據(jù)的代碼
這篇文章主要介紹了利用python腳本提取Abaqus場輸出數(shù)據(jù),利用python腳本對Abaqus進行數(shù)據(jù)提取時,要對python腳本做前步的導(dǎo)入處理,本文通過實例代碼詳細講解需要的朋友可以參考下2022-11-11Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解
多態(tài)性通常在類的方法中使用,其中我們可以具有相同方法名稱的多個類,本文給大家介紹Python 中多態(tài)性的示例和類的繼承多態(tài)性詳解,需要的朋友可以參考下2023-10-10解決tf.keras.models.load_model加載模型報錯問題
這篇文章主要介紹了解決tf.keras.models.load_model加載模型報錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Selenium定時刷新網(wǎng)頁的實現(xiàn)代碼
這篇文章主要介紹了Selenium定時刷新網(wǎng)頁的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10用Python實現(xiàn)數(shù)據(jù)的透視表的方法
今天小編就為大家分享一篇用Python實現(xiàn)數(shù)據(jù)的透視表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python實現(xiàn)經(jīng)典算法拓撲排序、字符串匹配算法和最小生成樹實例
這篇文章主要介紹了Python實現(xiàn)經(jīng)典算法拓撲排序、字符串匹配算法和最小生成樹實例,拓撲排序、字符串匹配算法和最小生成樹是計算機科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu)和算法,它們在解決各種實際問題中具有重要的應(yīng)用價值,需要的朋友可以參考下2023-08-08