欢迎光临散文网 会员登陆 & 注册

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

2021-02-06 23:04 作者:萌萌哒汪帕斯  | 我要投稿

简介:

使用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。


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

分享到微博请遵守国家法律