内容简介:最近 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 播放音频轨道
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rationality for Mortals
Gerd Gigerenzer / Oxford University Press, USA / 2008-05-02 / USD 65.00
Gerd Gigerenzer's influential work examines the rationality of individuals not from the perspective of logic or probability, but from the point of view of adaptation to the real world of human behavio......一起来看看 《Rationality for Mortals》 这本书的介绍吧!