Python實現(xiàn)B站UP主自動監(jiān)控功能詳解
眾所周知,B站有很多有趣的UP主,可以教大家一些"實用"的知識:
但是他們一般都沒有固定的更新時間,那么如何才能第一時間知道自己又有新的飯點可以看的下飯素材呢?當然是用python來寫個腳本自動監(jiān)控UP是否更新了視頻,并自動下載啦~
廢話不多說,讓我們愉快地開始吧~
開發(fā)工具
Python版本:3.7.8
相關(guān)模塊:
DecryptLogin模塊;
videofetch模塊;
以及一些python自帶的模塊。
環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。
原理簡介
1.確定小目標
首先,確定一下我們想實現(xiàn)的腳本的功能:給定一些UP主的ID,我們自動關(guān)注這些UP主,并開始監(jiān)控這些UP主是否有更新視頻,如果有則微信進行通知并自動下載這些視頻。
2.模擬登錄
既然要實現(xiàn)自動關(guān)注功能當然還是要先實現(xiàn)B站的模擬登錄啦,這里我們還是借助公眾號之前開源的DecryptLogin包,先安裝一下:
# 請確保自己使用的是最新版本的DecryptLogin pip install DecryptLogin --upgrade
然后簡單寫幾行代碼就ok啦:
from DecryptLogin import login lg = login.Login() infos_return, session = lg.bilibili(mode='scanqr')
3.自動關(guān)注
我們先來抓包看看關(guān)注UP主時需要請求的接口吧,簡單調(diào)試之后發(fā)現(xiàn)以下這個鏈接不管從名字還有從需要攜帶的參數(shù)看都很可疑:
于是,我們可以先寫個腳本測試一下我們的想法,可以看到請求這個接口需要攜帶的參數(shù)如下:
經(jīng)過測試,必須要攜帶的參數(shù)是這些:
fid: 想要關(guān)注的UP主的ID;
act: 固定值, 為1;
re_src: 固定值, 為11;
jsonp: 固定值, 為jsonp;
csrf: 從登錄的cookies中可以拿到。
代碼實現(xiàn)如下:
'''關(guān)注某個UP主''' def follow(self, up_id): url = 'https://api.bilibili.com/x/relation/modify' data = { 'fid': up_id, 'act': 1, 're_src': 11, 'jsonp': 'jsonp', 'csrf': self.session.cookies.get_dict(domain='.bilibili.com').get('bili_jct', ''), } headers = { 'Host': 'api.bilibili.com', 'Origin': 'https://space.bilibili.com', 'Referer': f'https://space.bilibili.com/{up_id}/', } response = self.session.post(url, data=data, headers=headers) response_json = response.json() return response_json['code'], response_json.get('message', '')
測試之后登錄客戶端看發(fā)現(xiàn)確實可以成功關(guān)注對應(yīng)的UP主,于是這部分內(nèi)容也順利地完成啦~
4.實時監(jiān)控
實時監(jiān)控其實也很簡單,只需要先把目標UP主當前首頁的作品信息獲取到,然后每隔一段時間對比一次,看看有沒有新的作品出現(xiàn)就行啦。
具體而言,我們需要先獲取到UP主當前首頁的作品信息:
'''獲得UP主首頁所有視頻信息''' def getupvids(self, up_id): up_vids, aids = [], [] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'} params = {'keyword': '', 'mid': up_id, 'ps': 30, 'tid': 0, 'pn': 1, 'order': 'pubdate'} response = self.session.get('https://api.bilibili.com/x/space/arc/search', headers=headers, params=params) response_json = response.json() for item in response_json['data']['list']['vlist']: aids.append(item['aid']) for aid in aids: params = {'aid': aid} response = self.session.get('https://api.bilibili.com/x/web-interface/view', headers=headers, params=params) response_json = response.json() up_vids.append('https://www.bilibili.com/video/' + response_json['data']['bvid']) return up_vids
然后每隔一段時間對比一下就行:
for up_id in self.up_ids: self.logging(f'正在檢查UP主{ups_recorder[up_id]["username"]}是否更新了視頻...') vids = self.getupvids(up_id) ups_recorder[up_id]['updated_vids'] = [] for vid in vids: if vid in ups_recorder[up_id]['vids']: continue ups_recorder[up_id]['updated_vids'].append(vid) ups_recorder[up_id]['vids'].append(vid)
最后把對比結(jié)果打印出來,有更新則進行微信消息推送即可
for up_id in self.up_ids: if len(ups_recorder[up_id]['updated_vids']) > 0: msg = f'你關(guān)注的UP主{ups_recorder[up_id]["username"]}更新啦...' self.pushwechat(msg) self.logging(msg) for vid in ups_recorder[up_id]['updated_vids']: os.system(f'videodl -i {vid} -s {ups_recorder[up_id]["username"]}') else: msg = f'你關(guān)注的UP主{ups_recorder[up_id]["username"]}暫時沒有更新...' self.logging(msg)
大功告成啦,完整源代碼詳見相關(guān)文件~
效果展示
運行方式如下:
usage: bilibiliupmonitor.py [-h] [--ids IDS] [--key KEY] B站UP主監(jiān)控 optional arguments: -h, --help show this help message and exit --ids IDS 監(jiān)控的UP主ID, 例如"406756145,406756146" --key KEY Server醬的Key
例如:
python bilibiliupmonitor.py -ids 406756145
效果如下:視頻鏈接
到此這篇關(guān)于Python實現(xiàn)B站UP主自動監(jiān)控功能詳解的文章就介紹到這了,更多相關(guān)PythonB站監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python異步編程之a(chǎn)syncio低階API的使用詳解
asyncio中低階API的種類很多,涉及到開發(fā)的5個方面,這篇文章主要為大家詳細介紹了這些低階API的具體使用,感興趣的小伙伴可以學(xué)習(xí)一下2024-01-01python爬蟲項目設(shè)置一個中斷重連的程序的實現(xiàn)
這篇文章主要介紹了python爬蟲項目設(shè)置一個中斷重連的程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07網(wǎng)站滲透常用Python小腳本查詢同ip網(wǎng)站
這篇文章主要介紹了網(wǎng)站滲透常用Python小腳本查詢同ip網(wǎng)站,需要的朋友可以參考下2017-05-05Spring Cloud Feign高級應(yīng)用實例詳解
這篇文章主要介紹了Spring Cloud Feign高級應(yīng)用實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動搭建)
今天小編就為大家分享一篇使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動搭建),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01