通過Python實現(xiàn)Bilibili用戶追番信息統(tǒng)計(分數(shù)排序、好評率統(tǒng)計)

簡介:
使用bilibili_api外部庫,通過輸入用戶的uid從而讀取追番情況,將所追番劇以從高到低的分數(shù)排序展示,評價人數(shù)不足的番劇放至最后。并顯示所追番劇的優(yōu)質(zhì)率(大于等于9.5),良好率(大于等于8)。

作者介紹:
愛偶像大師,愛LoveLive!同時也是一名普通的大學生~~近來正在學習Python等知識。
歡迎關(guān)注我的個人網(wǎng)站:https://www.fyf99170.top
歡迎關(guān)注我的B站賬號:UID 32291160 萌萌噠汪帕斯


功能介紹:
今天在逛GitHub的時候,看到了由Passkou創(chuàng)建的bilibili_api的項目,該項目的介紹為:
這是一個用Python寫的調(diào)用?Bilibili?各種API的庫,范圍涵蓋視頻、音頻、直播、動態(tài)、專欄、用戶、番劇等。你可以使用很簡短的代碼去調(diào)用API,而不需要自己去尋找API,指定各種參數(shù)。
該外部庫的功能非常強大,因此我在該庫基礎(chǔ)上進行了研究。在本文中,我僅使用了該庫的user模塊,使用該模塊,通過輸入用戶的uid從而讀取追番情況,將所追番劇以從高到低的分數(shù)排序展示,評價人數(shù)不足的番劇放至最后。并顯示所追番劇的優(yōu)質(zhì)率(大于等于9.5),良好率(大于等于8)。
代碼節(jié)選如下圖所示,具體代碼見文末:


運行結(jié)果:
以我的賬號uid32291160作為示例進行展示:



從上面三圖可以看出,可以清晰的展示番劇的名稱和評分,分數(shù)由高到低排序。追番數(shù)目、優(yōu)質(zhì)番劇率和良好番劇率也能體現(xiàn)。當然,我們可以觀察其他用戶的追番情況,以uid2,bishi為示例:

注意:僅可以用戶在隱私設(shè)置中打開公開追番列表才能夠獲取到信息,我們輸入uid1發(fā)現(xiàn)無法讀取相應(yīng)信息。


可執(zhí)行文件下載(exe):
鏈接:https://pan.baidu.com/s/1wwbCnBOnJ6xkxkyWJjEjDA?
提取碼:wyjf?
解壓后打開exe文件即可使用。

代碼展示:
from bilibili_api import user ?# 調(diào)用bilibili_api
def take_second(elem):
? ?"""強制對第二個元素排序"""
? ?return elem[1]
def video_load(uid):
? ?"""用戶視頻信息讀取"""
? ?total = 0
? ?vivid_num = 0
? ?videos = []
? ?score_video_list = []
? ?no_score_video_list = []
? ?user_generator = user.get_bangumi_g(uid)
? ?for video in user_generator:
? ? ? ?videos.append(video)
? ?for bangumi in videos:
? ? ? ?title = bangumi["title"]
? ? ? ?score_pre = bangumi.get("rating", "無效")
? ? ? ?total += 1
? ? ? ?if score_pre != "無效":
? ? ? ? ? ?score = score_pre["score"]
? ? ? ? ? ?vivid_num += 1
? ? ? ? ? ?score_video_list.append((title, float(score)))
? ? ? ?else:
? ? ? ? ? ?no_score_video_list.append((title, "暫無評分"))
? ?return total, vivid_num, score_video_list, no_score_video_list
def score_soft(score_list):
? ?"""按照分數(shù)對番劇排序"""
? ?score_list.sort(key=take_second, reverse=True)
? ?return score_list
def percent_determine(score_list, no_score_list):
? ?"""優(yōu)質(zhì)率確定"""
? ?perfect_num = 0
? ?good_num = 0
? ?bad_num = 0
? ?for i in score_list:
? ? ? ?print(i[0], ":", i[1])
? ? ? ?if i[1] >= 9.5:
? ? ? ? ? ?perfect_num += 1
? ? ? ?elif 8 <= i[1] < 9.5:
? ? ? ? ? ?good_num += 1
? ? ? ?else:
? ? ? ? ? ?bad_num += 1
? ?for i in no_score_list:
? ? ? ?print(i[0], ":", i[1])
? ?return perfect_num, good_num
def main():
? ?try:
? ? ? ?uid = int(input("請輸入uid:"))
? ? ? ?total, vivid_num, score_video_list, no_score_video_list = video_load(uid)
? ? ? ?score_video_list = score_soft(score_video_list)
? ? ? ?perfect_num, good_num = percent_determine(score_video_list, no_score_video_list)
? ? ? ?print("\n用戶uid:", uid, "的追番情況如下:")
? ? ? ?print("共追番劇數(shù):", total, "有評分番劇數(shù):", vivid_num)
? ? ? ?print("優(yōu)質(zhì)番劇率:", round((perfect_num / vivid_num) * 100, 2), "%")
? ? ? ?print("良好番劇率:", round(((good_num + perfect_num) / vivid_num) * 100, 2), "%")
? ?except Exception as m:
? ? ? ?print(m)
? ?input("按下enter以結(jié)束程序")
main()

結(jié)語/致謝:
本項目使用了外部庫bilibili_api,作者為Passkou,對此表示感謝。該外部庫GitHub鏈接為https://github.com/Passkou/bilibili_api。