内容简介:最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数。过去一年我居然在 B 站上看了然而我又很好奇,到底我在 B 站上都看了些什么类型的视频,用几行 Python 代码实现了一下。
用 Python 获取 B 站播放历史记录
最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数。过去一年我居然在 B 站上看了 2600+
个视频,总计 251
个小时,居然花了这么多时间,吓得我差点把 Bilibili App 卸载了…
然而我又很好奇,到底我在 B 站上都看了些什么类型
的视频,用几行 Python 代码实现了一下。
获取请求 Api 接口与 Cookie
实现起来非常容易,获取 cookie 模拟请求即可
-
使用 chrome 浏览器
-
登陆 B 站 ,进入历史记录 https://www.bilibili.com/account/history
-
在网页任意位置,鼠标右键
检查
- 按照下图所示,进入
Network
页面,筛选框输入history
,对结果进行筛选,页面滚轮往下即可看到浏览过程中的历史记录请求的Header
- 将 Header 下, cookie 一行的字符串复制出来到一个
cookie.txt
文本里
Python 代码实现
- 伪造浏览器请求
import json import requests def read_cookies_file(filename): """read cookie txt file :param filename: (str) cookies file path :return: (dict) cookies """ with open(filename, 'r') as fp: cookies = fp.read() return cookies def get_header(filename): cookie = read_cookies_file(filename) headers = { 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', 'Connection': 'keep-alive', 'Cookie': cookie, 'Host': 'api.bilibili.com', 'Referer': 'https://www.bilibili.com/account/history', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } return headers def req_get(headers, url): resp = requests.get(url, headers=headers) return json.loads(resp.text)
- 使用 cookie 模拟请求
def get_all_bili_history(cookie_file): headers = bilibili.get_header(cookie_file) history = {'all': []} for page_num in range(MAX_PAGE): time.sleep(0.6) url = 'https://api.bilibili.com/x/v2/history?pn={pn}&ps={ps}&jsonp=jsonp'.format(pn=page_num, ps=PAGE_PER_NUM) result = bilibili.req_get(headers, url) print('page = {} code = {} datalen = {}'.format(page_num, result['code'], len(result['data']))) if len(result['data']) == 0: break history['all'].append(result) return history
- 代码非常简单,完整代码在 https://github.com/wangshub/bilibili-history
存在的问题
-
本来想拿到所有的播放记录,做一些统计和预测,但是经过实测,B 站只能获取到最近
1000
条或者最近3
个月的播放记录 -
如果想获得更多,只能做一个监测程序,不停地从接口获取数据
安全问题
尽量不要使用不安全的 wifi 网络,有可能会被别有用心之人获取网络请求的 Package,易泄露个人隐私。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Python 播放音乐:使用 mido 编写,播放多声轨 MIDI 文件音乐
- Lotus 云盘 2.2 发布,增加视频转码及在线播放、MP3 播放功能
- 播放器性能优化之路
- Java播放多媒体
- iOS 音视频播放
- 使用 AudioTrack 播放音频轨道
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。