292 lines
11 KiB
Markdown
292 lines
11 KiB
Markdown
# Bilibili — Site Navigation & Structure
|
|||
|
|
|
||
|
|
Field-tested against bilibili.com on 2026-05-01.
|
||
|
|
Requires login for personal-space features; public pages are accessible without auth.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## URL Patterns
|
||
|
|
|
||
|
|
### Core pages
|
||
|
|
|
||
|
|
| Page | URL |
|
||
|
|
|------|-----|
|
||
|
|
| Home (recommended feed) | `https://www.bilibili.com/` |
|
||
|
|
| Dynamics (following feed) | `https://t.bilibili.com/` |
|
||
|
|
| Personal space | `https://space.bilibili.com/{UID}` |
|
||
|
|
| Watch history | `https://www.bilibili.com/account/history` |
|
||
|
|
| Watch later | `https://www.bilibili.com/watchlater/#/list` |
|
||
|
|
| Messages | `https://message.bilibili.com/` |
|
||
|
|
| Search | `https://search.bilibili.com/all?keyword={QUERY}` |
|
||
|
|
|
||
|
|
### Personal space sub-pages
|
||
|
|
|
||
|
|
| Page | URL |
|
||
|
|
|------|-----|
|
||
|
|
| Home (videos + favorites) | `https://space.bilibili.com/{UID}` |
|
||
|
|
| Dynamics (user activity) | `https://space.bilibili.com/{UID}/dynamic` |
|
||
|
|
| Uploads | `https://space.bilibili.com/{UID}/upload` |
|
||
|
|
| Collections & series | `https://space.bilibili.com/{UID}/lists` |
|
||
|
|
| Favorites | `https://space.bilibili.com/{UID}/favlist` |
|
||
|
|
| Bangumi tracking | `https://space.bilibili.com/{UID}/bangumi` |
|
||
|
|
| Settings | `https://space.bilibili.com/{UID}/settings` |
|
||
|
|
|
||
|
|
### Discovery
|
||
|
|
|
||
|
|
| Page | URL |
|
||
|
|
|------|-----|
|
||
|
|
| Popular / Hot | `https://www.bilibili.com/v/popular/all` |
|
||
|
|
| Weekly must-watch | `https://www.bilibili.com/v/popular/weekly?num={ISSUE}` |
|
||
|
|
| All-time classics | `https://www.bilibili.com/v/popular/all` (入站必刷 tab) |
|
||
|
|
| Ranking (all) | `https://www.bilibili.com/v/popular/rank/all` |
|
||
|
|
| Topics | `https://www.bilibili.com/v/topic/` |
|
||
|
|
|
||
|
|
### Video page
|
||
|
|
|
||
|
|
| Aspect | Pattern |
|
||
|
|
|--------|---------|
|
||
|
|
| Watch URL | `https://www.bilibili.com/video/{BV_ID}` |
|
||
|
|
| BV format | `BV` prefix + 10 alphanumeric chars, e.g. `BV1HeRKBdEoX` |
|
||
|
|
| AV format (legacy) | `av` + digits, e.g. `av170001` (still resolves) |
|
||
|
|
|
||
|
|
### Content platforms
|
||
|
|
|
||
|
|
| Page | URL |
|
||
|
|
|------|-----|
|
||
|
|
| Anime | `https://www.bilibili.com/anime/` |
|
||
|
|
| Movie | `https://www.bilibili.com/movie/` |
|
||
|
|
| TV series | `https://www.bilibili.com/tv/` |
|
||
|
|
| Documentary | `https://www.bilibili.com/documentary/` |
|
||
|
|
| Variety show | `https://www.bilibili.com/variety/` |
|
||
|
|
| Chinese animation | `https://www.bilibili.com/guochuang/` |
|
||
|
|
| Read (articles/blogs) | `https://www.bilibili.com/read/home` |
|
||
|
|
| Audio / Music | `https://www.bilibili.com/audio/home` |
|
||
|
|
| Courses (课堂) | `https://www.bilibili.com/cheese/` |
|
||
|
|
| Live | `https://live.bilibili.com/` |
|
||
|
|
| Game center | `https://game.bilibili.com/platform` |
|
||
|
|
| Manga (漫画) | `https://manga.bilibili.com/` |
|
||
|
|
| Mall (会员购) | `https://show.bilibili.com/platform/home.html` |
|
||
|
|
| Esports / Matches | `https://www.bilibili.com/match/home/` |
|
||
|
|
|
||
|
|
### Creator
|
||
|
|
|
||
|
|
| Page | URL |
|
||
|
|
|------|-----|
|
||
|
|
| Creator center | `https://member.bilibili.com/platform/home` |
|
||
|
|
| Upload video | `https://member.bilibili.com/platform/upload/video/frame` |
|
||
|
|
|
||
|
|
### Other
|
||
|
|
|
||
|
|
| Page | URL |
|
||
|
|
|------|-----|
|
||
|
|
| Premium (大会员) | `https://account.bilibili.com/big` |
|
||
|
|
| Blackroom (bans) | `https://www.bilibili.com/blackroom/ban` |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Top Navigation Bar
|
||
|
|
|
||
|
|
Horizontal nav across the top of `bilibili.com`:
|
||
|
|
|
||
|
|
```
|
||
|
|
首页 | 番剧 | 直播 | 游戏中心 | 会员购 | 漫画 | 赛事
|
||
|
|
```
|
||
|
|
|
||
|
|
These are always visible regardless of login state.
|
||
|
|
|
||
|
|
### Left sidebar channels (分区)
|
||
|
|
|
||
|
|
On the homepage, the left sidebar lists 30 content channels. Each maps to `bilibili.com/c/{SLUG}` or a top-level path:
|
||
|
|
|
||
|
|
```
|
||
|
|
动态 热门 番剧 电影 国创 电视剧 综艺 纪录片
|
||
|
|
动画 游戏 鬼畜 音乐 舞蹈 影视 娱乐 知识
|
||
|
|
科技数码 资讯 美食 小剧场 汽车 时尚美妆
|
||
|
|
体育运动 动物 vlog 绘画 人工智能 家装房产
|
||
|
|
户外潮流 健身
|
||
|
|
```
|
||
|
|
|
||
|
|
Channel URLs:
|
||
|
|
- `bilibili.com/c/{slug}` — e.g. `/c/douga` (动画), `/c/game`, `/c/music`, `/c/ai`
|
||
|
|
- Some use full words: `/c/knowledge`, `/c/information`, `/c/food`, `/c/fashion`, `/c/sports`, `/c/animal`, `/c/painting`, `/c/home`, `/c/outdoors`, `/c/gym`
|
||
|
|
- Others use abbreviations: `/c/kichiku` (鬼畜), `/c/ent`, `/c/tech`
|
||
|
|
- Short play: `/c/shortplay`
|
||
|
|
- Car: `/c/car` (no trailing slash in source)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## User Menu (right side of top bar, login required)
|
||
|
|
|
||
|
|
Dropdown accessible via avatar in top-right corner:
|
||
|
|
|
||
|
|
| Entry | URL | Notes |
|
||
|
|
|-------|-----|-------|
|
||
|
|
| 大会员 | `account.bilibili.com/big` | Premium status |
|
||
|
|
| 消息 | `message.bilibili.com` | Sub-items: 回复我的, @我的, 收到的赞, 系统消息, 我的消息 |
|
||
|
|
| 动态 | `t.bilibili.com` | Following feed — most important for daily use |
|
||
|
|
| 收藏 | `space.bilibili.com/{UID}/favlist` | Favorite folders |
|
||
|
|
| 历史 | `https://www.bilibili.com/account/history` | Watch history |
|
||
|
|
| 创作中心 | `member.bilibili.com/platform/home` | Creator dashboard |
|
||
|
|
| 投稿 | `member.bilibili.com/platform/upload/video/frame` | Upload |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Personal Space Tabs (`space.bilibili.com/{UID}`)
|
||
|
|
|
||
|
|
Sub-navigation within the personal space:
|
||
|
|
|
||
|
|
```
|
||
|
|
主页 | 动态 | 投稿 | 合集和系列 | 收藏 | 追番追剧 | 设置
|
||
|
|
```
|
||
|
|
|
||
|
|
- **主页** — video grid + favorite folders + stats
|
||
|
|
- **动态** — this user's activity feed (distinct from `t.bilibili.com` which is the *following* feed)
|
||
|
|
- **投稿** — published videos, sortable by: 最新发布 / 最多播放 / 最多收藏
|
||
|
|
- **合集和系列** — curated video collections
|
||
|
|
- **收藏** — favorite folders (public or private)
|
||
|
|
- **追番追剧** — tracked anime/drama
|
||
|
|
- **设置** — space configuration
|
||
|
|
|
||
|
|
### User Stats (visible on personal space)
|
||
|
|
|
||
|
|
Selector: `.nav-statistics` contains `.nav-statistics__item` children.
|
||
|
|
|
||
|
|
| Stat | Class |
|
||
|
|
|------|-------|
|
||
|
|
| 关注数 (following) | `.nav-statistics__item.jumpable` (first) |
|
||
|
|
| 粉丝数 (followers) | `.nav-statistics__item.jumpable` (second) |
|
||
|
|
| 获赞数 (likes) | `.nav-statistics__item` (third) |
|
||
|
|
| 播放数 (views) | `.nav-statistics__item` (fourth) |
|
||
|
|
|
||
|
|
Values are in `.nav-statistics__item-num`.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Video Page — Interaction Features
|
||
|
|
|
||
|
|
When on a watch page (`bilibili.com/video/{BV_ID}`), the toolbar below the player offers:
|
||
|
|
|
||
|
|
| Action | Selector / Class | Notes |
|
||
|
|
|--------|------------------|-------|
|
||
|
|
| Like (赞) | `.video-like` | Count in `.video-like-info` |
|
||
|
|
| Coin (投币) | `.video-coin` | Each user can donate up to 2 coins per video |
|
||
|
|
| Collect (收藏) | `.video-collect` | Add to a favorite folder |
|
||
|
|
| Share (分享) | `.video-share-wrap` | Opens share panel with link/copy/QR |
|
||
|
|
| Triple-tap (三连) | Long-press like button | Triggers like + coin + collect in one action |
|
||
|
|
|
||
|
|
**三连 (triple-tap)** is Bilibili's signature interaction — long-pressing the like button sends a like, donates 1 coin, and adds to favorites simultaneously.
|
||
|
|
|
||
|
|
### Coins (硬币)
|
||
|
|
|
||
|
|
- Users receive coins daily by logging in
|
||
|
|
- Coins are spent by "投币" on videos (1 or 2 per video)
|
||
|
|
- Coin count appears in the header user area
|
||
|
|
- Separate from B币 (B-Coins) which are purchased with real money
|
||
|
|
|
||
|
|
### Danmaku (弹幕)
|
||
|
|
|
||
|
|
Real-time comments that scroll across the video. Toggle with the danmaku button in the player controls. Danmaku data is loaded via XHR after the video player initializes.
|
||
|
|
|
||
|
|
### Charging (充电)
|
||
|
|
|
||
|
|
Monthly subscription / tipping to support creators. Accessible from the creator's space page or below the video player.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Favorites (`/favlist`)
|
||
|
|
|
||
|
|
Each favorite folder displays: name, video count, visibility (公开/仅自己可见).
|
||
|
|
|
||
|
|
Two sections on the page:
|
||
|
|
- **我创建的收藏夹** — user's own folders
|
||
|
|
- **我追的合集/收藏夹** — followed collections from other users
|
||
|
|
|
||
|
|
Actions:
|
||
|
|
- Create new folder: click "新建收藏夹"
|
||
|
|
- Set visibility: per-folder setting (公开 / 仅自己可见)
|
||
|
|
- Default folder is created automatically and holds all quick-favorited videos
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Watch History (`/account/history`)
|
||
|
|
|
||
|
|
Features:
|
||
|
|
- **Pause/resume** recording — "暂停记录历史" / "继续记录历史"
|
||
|
|
- **Clear all** — "清空历史"
|
||
|
|
- **Date filters** — 今天 / 昨天 / 近1周 / 1周前 / 1个月前
|
||
|
|
- Each entry shows: title, progress (看到 XX:XX), uploader name, category tag
|
||
|
|
|
||
|
|
History items are in `.history-record` elements.
|
||
|
|
|
||
|
|
### Watch Later (稍后再看)
|
||
|
|
|
||
|
|
Located at `bilibili.com/watchlater/#/list`. Also appears as a default folder in the favorites section on the personal space homepage.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Search (`search.bilibili.com`)
|
||
|
|
|
||
|
|
Search results are tabbed:
|
||
|
|
|
||
|
|
```
|
||
|
|
综合 | 视频 | 番剧 | 影视 | 直播 | 专栏 | 用户
|
||
|
|
```
|
||
|
|
|
||
|
|
Each tab shows a count badge (e.g., "视频99+"). Query param: `?keyword={QUERY}`.
|
||
|
|
|
||
|
|
Autocomplete suggestions appear when typing in the search input.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Popular / Hot Page (`/v/popular/all`)
|
||
|
|
|
||
|
|
Tab bar:
|
||
|
|
|
||
|
|
```
|
||
|
|
综合热门 | 每周必看 | 入站必刷 | 排行榜 | 全站音乐榜
|
||
|
|
```
|
||
|
|
|
||
|
|
- **综合热门** — trending right now
|
||
|
|
- **每周必看** — weekly curated picks, URL: `/v/popular/weekly?num={ISSUE}`
|
||
|
|
- **入站必刷** — all-time classic videos
|
||
|
|
- **排行榜** — redirects to `/v/popular/rank/all`
|
||
|
|
- **全站音乐榜** — music-specific chart
|
||
|
|
|
||
|
|
### Ranking (`/v/popular/rank/all`)
|
||
|
|
|
||
|
|
24 category tabs: 全部, 番剧, 国创, 纪录片, 电影, 电视剧, 综艺, 动画, 游戏, 鬼畜, 音乐, 舞蹈, 影视, 娱乐, 知识, 科技, 数码, 美食, 汽车, 时尚, 美妆, 体育, 运动, 动物
|
||
|
|
|
||
|
|
Each entry shows: rank number, title, creator, view count, interaction count.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Detecting Login State
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Logged in: avatar element exists
|
||
|
|
avatar = js("document.querySelector('.header-entry-avatar')?.src || 'not logged in'")
|
||
|
|
|
||
|
|
# Logged out: login button visible
|
||
|
|
login_btn = js("document.querySelector('.header-login-entry')?.textContent?.trim() || 'no login btn'")
|
||
|
|
```
|
||
|
|
|
||
|
|
Extract the current user's UID:
|
||
|
|
|
||
|
|
```python
|
||
|
|
uid = js("document.querySelector('.header-entry-avatar')?.closest('a')?.href?.match(/space\\.bilibili\\.com\\/(\\d+)/)?.[1]")
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Gotchas
|
||
|
|
|
||
|
|
- **动态 has two meanings** — `t.bilibili.com` is the *following* feed (content from people you follow), while `space.bilibili.com/{UID}/dynamic` is a specific *user's* activity. They are different pages.
|
||
|
|
- **Favorites URL redirects** — navigating to `/favlist` may redirect to `/favlist?fid={DEFAULT_FOLDER_ID}&ftype=create`, which opens the first folder automatically.
|
||
|
|
- **History can be paused** — if the history page says "历史功能暂停中", recording was paused by the user. Click "继续记录历史" to resume.
|
||
|
|
- **UID is numeric** — Bilibili user IDs are all-numeric, unlike YouTube handles. The UID appears in the space URL and is stable.
|
||
|
|
- **BV vs AV IDs** — modern video IDs use the BV format (e.g. `BV1HeRKBdEoX`). Legacy AV format (e.g. `av170001`) still resolves but all new content uses BV.
|
||
|
|
- **Video URL gets `?vd_source=` appended** — when navigating from an authenticated session, bilibili appends a `vd_source` tracking parameter. This can be stripped.
|
||
|
|
- **Watch later is separate from history** — `/watchlater/#/list` is a single-page app path, not a sub-page of `/account/history`.
|
||
|
|
- **Coins are not B-Coins** — 硬币 (coins) are earned daily for free. B币 (B-Coins) are purchased with real money and used for tipping/charging/premium.
|
||
|
|
- **Some channel URL slugs use abbreviations** — 鬼畜 is `/c/kichiku`, 娱乐 is `/c/ent`, 科技 is `/c/tech`. Not all are pinyin or translated.
|
||
|
|
- **`wait_for_load()` is not enough on video pages** — like YouTube, the video player and its toolbar components hydrate after the load event. Add a `wait(3)` before querying video toolbar selectors.
|