今天Geek专栏为大家带来

乐聚机器人王松博士的

“用Python获取B站播放历史记录”

最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数。过去一年我居然在 B 站上看了 2600+ 个视频,总计 251 个小时,居然花了这么多时间,吓得我差点把 Bilibili App 卸载了...

然而我又很好奇,到底我在 B 站上都看了些什么类型 小姐姐 的视频,用几行 Python 代码实现了一下。

获取请求 Api 接口与 Cookie

实现起来非常容易,获取 cookie 模拟请求即可

1. 使用 chrome 浏览器

3. 在网页任意位置,鼠标右键 检查

4. 按照下图所示,进入 Network 页面,筛选框输入 history,对结果进行筛选,页面滚轮往下即可看到浏览过程中的历史记录请求的 Header

5. 将 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

存在的问题

本来想拿到所有的播放记录,做一些统计和预测,但是经过实测,B 站只能获取到最近 1000 条或者最近 3 个月的播放记录

如果想获得更多,只能做一个监测程序,不停地从接口获取数据

安全问题

尽量不要使用不安全的 wifi 网络,有可能会被别有用心之人获取网络请求的 Package,易泄露个人隐私。

b站看那个的python_用Python获取B站播放历史记录 !男友居然天天背着我看这些!...相关推荐

  1. python查看历史记录_用Python获取B站播放历史记录

    用 Python 获取 B 站播放历史记录 最近 B 站出了一个年度报告,统计用户一年当中在 B 站上观看视频的总时长和总个数.过去一年我居然在 B 站上看了 2600+ 个视频,总计 251 个小时 ...

  2. python获取b站视频封面及弹幕

    python网络爬虫 利用python获取b站视频封面及弹幕 获取弹幕 获取封面 完整代码 利用python获取b站视频封面及弹幕 获取弹幕 从https://api.bilibili.com/x/v ...

  3. python获取B站单个视频的封面

    python获取B站单个视频的封面 仅用于个人学习 import requests, reurl = 'https://www.bilibili.com/video/BV1f64y1Z7Qp' # 修 ...

  4. 手把手教你使用Python获取B站视频并在本地实现弹幕播放功能

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 少小虽非投笔吏,论功还欲请长缨. ...

  5. python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数

    前言 不少人对B站粉丝数有着强烈的"控制感",特别是B站用户"老番茄"的粉丝数要达到1000万了,不少人想要见到突破1000w粉的那一瞬间,虽然有很多网站提供了 ...

  6. 怎么查看电脑有没有python_使用python获取电脑的磁盘信息方法

    使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能. 在iPython交互界面中进行如下演示: 查看电脑的磁盘分区: I ...

  7. python b站 关注_[我叫以赏]Python获取B站UP主粉丝数

    前言 不少人对B站粉丝数有着强烈的"控制感",特别是B站用户"老番茄"的粉丝数要达到1000万了,不少人想要见到突破1000w粉的那一瞬间,虽然有很多网站提供了 ...

  8. 初学,用python获取B站视频

    初学,记录一下而已,很简单的一个小玩意 看之前得稍微会一点html,http协议,requests,正则表达式,这样不至于看不懂 b站的web端是没有开放下载的,但是没有关系,可以从网页元素里找到视频 ...

  9. 通达信行情数据获取--python_利用 Python 获取余额宝历史收益数据

    最近想做一个关于用一些指数基金与余额宝组成的简单 风险-无风险 投资组合的实验计算,发现通达信之类的行情软件并没有提供完整的余额宝收益信息,如通达信仅有年化收益率的数据,并没有万份收益的数据.因此考虑 ...

最新文章

  1. Android 判断字符串是否为空
  2. Python之流程控制
  3. 内存泄露问题改进(转自vczh)
  4. 小程序之点击跳转到对应内容
  5. BZOJ-3173-最长上升子序列
  6. 学习:组件生命周期(1)
  7. http的302,303和307
  8. 慕课堂计算机word,数字技能 – 办公工具(Microsoft Word、Excel、Power Point)
  9. [react] React的displayName有什么作用?
  10. 基于Tomcat的JSP开发过程中的中文乱码问题解决
  11. 知道半径 两点角度 怎么求坐标
  12. ios不能保存png_ios转一加8t使用体验随用随更新
  13. 【复习篇】高等代数第五版重难知识点整理(1)
  14. micropython 移植k210_重构+优化 micropython 下 k210 (esp8285) 的 AT network 通信过程(附代码,顺便讲讲状态机实现)。...
  15. 计算机基础客户端v7,ComwareV7
  16. ANSYS_APDL——实例002-模态分析
  17. 如何快速构建一个Flutter互动直播应用
  18. c++中arccos()的用法(提醒自己)
  19. 任正非,马云,马化腾:真正顶级厉害的人,都有一个共同特点
  20. windows下装ipython

热门文章

  1. LeetCode中等题之两两交换链表中的节点
  2. LeetCode简单题之寻找比目标字母大的最小字母
  3. 图像分类:CVPR2020论文解读
  4. Activity在有Dialog时按Home键的生命周期
  5. php set medias,laravel5.1 -- Integrate FileManager and CKeditor into laravel
  6. java类安卓app 简介_android.app.Activity 的介绍
  7. List 为什么可以实例化ArrayList
  8. Android 接口回调
  9. popWindow 出现点击上下空白区域消失点击左右空白区域不消失弹框的处理方法
  10. selenium 不同版本Driver