想看看自己的哔哩哔哩关注了哪些人,并且是什么时候关注的,可以直接爬下来看。

只需要找到这个网址,然后就可以从里面提取代码中的信息了:https://api.bilibili.com/x/relation/followings?vmid=391136387&pn=1&ps=20&order=desc&order_type=&gaia_source=main_web&web_location=333.999&w_rid=c5ce5884056fbb240868324f13f009f7&wts=1699885486

from datetime import datetime

import requests
import json

headers = {
  'authority': 'api.bilibili.com',
  'accept': '*/*',
  'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
  'cookie': '自行获取',
  'origin': 'https://space.bilibili.com',
  'referer': 'https://space.bilibili.com/391136387/fans/follow?spm_id_from=333.788.0.0',
  'sec-ch-ua': '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"Windows"',
  'sec-fetch-dest': 'empty',
  'sec-fetch-mode': 'cors',
  'sec-fetch-site': 'same-site',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
}

def convert_timestamp_to_date(timestamp):
    return datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

def fetch_followings(vmid, max_per_page=50):
    base_url = "https://api.bilibili.com/x/relation/followings"
    all_followings = []
    page_number = 1
    total_followers = None

    while True:
        params = {
            "vmid": vmid,
            "pn": page_number,
            "ps": max_per_page,
            "order": "desc",
            "order_type": "",
            "gaia_source": "main_web",
            "web_location": "333.999"
        }
        response = requests.get(base_url, params=params, headers=headers)
        if response.status_code != 200:
            print(f"Failed to fetch data: {response.status_code}")
            break

        data = response.json()
        if 'data' not in data or 'list' not in data['data']:
            print("Invalid response format.")
            break

        followings = data['data']['list']
        for following in followings:
            following['followed_date'] = convert_timestamp_to_date(following['mtime'])

        all_followings.extend(followings)

        if total_followers is None:
            total_followers = data['data']['total']

        if len(all_followings) >= total_followers:
            break

        page_number += 1

    return all_followings

def save_data(data, filename="followings_data.json"):
    with open(filename, "w", encoding='utf-8') as file:
        json.dump(data, file, ensure_ascii=False, indent=4)


def main():
    vmid = "391136387"
    followings = fetch_followings(vmid)
    save_data(followings)

if __name__ == "__main__":
    main()