因为是相当模拟访问历史页面,所有只能在B站限制下查询历史记录(大概一两千左右),需要事先获取自己账号的SESSDATA和_uuid,具体怎么获取可以百度。
输出可以查询到的最早的记录,记录总数,观看总时间,观看次数前五的标签和up主。
已查询到1403条记录
最早可查询记录为:2022-04-06 15:33:43
总计观看3750.366666666667分钟
观看次数前五名如下:
标签:
tag:单机游戏,观看次数:160次
tag:搞笑,观看次数:133次
tag:网络游戏,观看次数:117次
tag:电子竞技,观看次数:105次
tag:日常,观看次数:89次
up主:
up:鹦鹉螺预告片,观看次数:30次
up:观察者网,观看次数:24次
up:老郭美食,观看次数:15次
up:小菜菜菜菜哟,观看次数:15次
有条件可以直接点击下面的colab链接运行。
https://colab.research.google.com/drive/1ulqI2EOKkdC7rU32kKAOa9QTC7sezGYY?usp=sharing
import requests
import time
cookies="_uuid=你的_uuid; SESSDATA=你的SESSDATA"
url="https://api.bilibili.com/x/web-interface/history/cursor"
hd= {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/99.0.4844.82 Safari/537.36'}
r= requests.Session()
r.cookies['cookies']=cookies
response= r.get(url,headers=hd)
h_list=response.json()['data']['list']
h_num=len(h_list)
h_time=0
h_tags=[]
h_author_name=[]
watch_time=0
for iin range(len(h_list)):
if h_list[i]['progress']==-1:
watch_time= watch_time+ h_list[i]['duration']
else:
watch_time= watch_time+ h_list[i]['progress']
while len(h_list)>0:
h_time= h_list[len(h_list)-1]['view_at']
url= "https://api.bilibili.com/x/web-interface/history/cursor?view_at="+str(h_time)
response= r.get(url,headers=hd)
h_list= response.json()['data']['list']
h_num=h_num+ len(h_list)
for iin range(len(h_list)):
h_tags.append(h_list[i]['tag_name'])
h_author_name.append(h_list[i]['author_name'])
if h_list[i]['progress']==-1:
watch_time=watch_time+h_list[i]['duration']
else:
watch_time= watch_time+ h_list[i]['progress']
print("已查询到"+str(h_num)+"条记录")
h_time=time.localtime(h_time)
print("最早可查询记录为:"+time.strftime("%Y-%m-%d %H:%M:%S", h_time))
watch_time=watch_time/60
print("总计观看"+str(watch_time)+"分钟")
tag_names=list(set(h_tags))
tag_names.pop(0)
tag_names_num=[]
for iin range(len(tag_names)):
tag_names_num.append(h_tags.count(tag_names[i]))
author_name= list(set(h_author_name))
author_name.pop(0)
author_name_num=[]
for iin range(len(author_name)):
author_name_num.append(h_author_name.count(author_name[i]))
print("观看次数前五名如下:")
print("标签:")
for iin range(5):
max_num=tag_names_num.index(max(tag_names_num))
max_watch_tag=tag_names[max_num]
max_watch_tag_num=tag_names_num[max_num]
tag_names.pop(max_num)
tag_names_num.pop(max_num)
print("tag:"+max_watch_tag+",观看次数:"+str(max_watch_tag_num)+"次")
print("up主:")
for iin range(5):
max_num=author_name_num.index(max(author_name_num))
max_watch_up=author_name[max_num]
max_watch_up_num=author_name_num[max_num]
author_name.pop(max_num)
author_name_num.pop(max_num)
print("up:"+max_watch_up+",观看次数:"+str(max_watch_up_num)+"次")
Comments