通过Python实现Bilibili用户追番信息统计(分数排序、好评率统计)

简介:
使用bilibili_api外部库,通过输入用户的uid从而读取追番情况,将所追番剧以从高到低的分数排序展示,评价人数不足的番剧放至最后。并显示所追番剧的优质率(大于等于9.5),良好率(大于等于8)。

作者介绍:
爱偶像大师,爱LoveLive!同时也是一名普通的大学生~~近来正在学习Python等知识。
欢迎关注我的个人网站:https://www.fyf99170.top
欢迎关注我的B站账号:UID 32291160 萌萌哒汪帕斯


功能介绍:
今天在逛GitHub的时候,看到了由Passkou创建的bilibili_api的项目,该项目的介绍为:
这是一个用Python写的调用 Bilibili 各种API的库,范围涵盖视频、音频、直播、动态、专栏、用户、番剧等。你可以使用很简短的代码去调用API,而不需要自己去寻找API,指定各种参数。
该外部库的功能非常强大,因此我在该库基础上进行了研究。在本文中,我仅使用了该库的user模块,使用该模块,通过输入用户的uid从而读取追番情况,将所追番剧以从高到低的分数排序展示,评价人数不足的番剧放至最后。并显示所追番剧的优质率(大于等于9.5),良好率(大于等于8)。
代码节选如下图所示,具体代码见文末:


运行结果:
以我的账号uid32291160作为示例进行展示:



从上面三图可以看出,可以清晰的展示番剧的名称和评分,分数由高到低排序。追番数目、优质番剧率和良好番剧率也能体现。当然,我们可以观察其他用户的追番情况,以uid2,bishi为示例:

注意:仅可以用户在隐私设置中打开公开追番列表才能够获取到信息,我们输入uid1发现无法读取相应信息。


可执行文件下载(exe):
链接:https://pan.baidu.com/s/1wwbCnBOnJ6xkxkyWJjEjDA
提取码:wyjf
解压后打开exe文件即可使用。

代码展示:
from bilibili_api import user # 调用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):
"""按照分数对番剧排序"""
score_list.sort(key=take_second, reverse=True)
return score_list
def percent_determine(score_list, no_score_list):
"""优质率确定"""
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("共追番剧数:", total, "有评分番剧数:", vivid_num)
print("优质番剧率:", 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以结束程序")
main()

结语/致谢:
本项目使用了外部库bilibili_api,作者为Passkou,对此表示感谢。该外部库GitHub链接为https://github.com/Passkou/bilibili_api。