b站看那个的python_用Python获取B站播放历史记录 !男友居然天天背着我看这些!...
今天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站播放历史记录 !男友居然天天背着我看这些!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 昨晚做了一个无比惊悚的梦,生生把自己吓醒
- 下一篇: 谷歌json插件_程序员必备的4款Chr