Bilibili Danmaku (Bullet Comment) Extractor
Pricing
from $10.00 / 1,000 results
Bilibili Danmaku (Bullet Comment) Extractor
Extract timed danmaku (bullet comments) from Bilibili videos: resolve a BV id to its cid then pull every comment with its in-video timestamp, color, mode and send-time. By video or trending feed. No login.
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Bilibili Danmaku (Bullet Comment) Scraper
Extract every timed danmaku — the "bullet comments" that fly across the screen of a Bilibili video — together with the exact second in the video each one was posted at. It is a crowd-sourced, second-by-second reaction stream with no clean Western equivalent, ideal for sentiment analysis, highlight detection, and engagement research.
Why use this actor
- No account, no login, no API key — just paste a video id or link and run.
- A dataset you can't get elsewhere — the flying on-screen comments, each pinned to its moment in the video timeline. Great for spotting the funniest, most-hyped, or most-controversial seconds of a video.
- Discover what's hot — a "popular" mode that first pulls Bilibili's trending videos, then collects their comments, so you don't need to know video ids in advance.
- Clean, structured output — one row per comment with its timestamp-in-video, post time, colour, on-screen style, and an anonymized sender tag. Ready for spreadsheets, databases, or pipelines.
- Runs on a schedule with automatic retries — export to JSON, CSV, or Excel. No scrapers or browsers to babysit.
How it works
- Choose a mode: paste your own videos, or let the actor pull the current trending feed.
- For each video, the actor looks up the video (including its individual parts, if any).
- It collects the full set of on-screen comments for the video and reads out each comment's text, its position in the video timeline, and when it was posted.
- Every comment becomes one row in your dataset.
You never manage scrapers, browsers, or blocks — just provide videos and read the results.
Input
Mode: Video (by BV id / link) — you supply the videos.
{"mode": "video","videos": ["BV1juM36LEg6"],"firstPartOnly": true,"maxDanmakuPerVideo": 0,"maxItems": 500}
Mode: Popular (trending feed) — the actor discovers videos for you.
{"mode": "popular","popularPages": 1,"pageSize": 20,"maxItems": 500}
| Field | Type | Description |
|---|---|---|
mode | string | video (use the videos you provide) or popular (discover trending videos first). Default video. |
videos | array of strings | Video mode. Bilibili BV ids (e.g. BV1juM36LEg6) or full video links (https://www.bilibili.com/video/BV1juM36LEg6). The id is read from a link automatically. |
firstPartOnly | boolean | Many videos have several parts. true (default) pulls comments from only the first part; false pulls from every part. |
popularPages | integer | Popular mode. How many pages of the trending feed to walk (default 1). |
pageSize | integer | Popular mode. Videos per trending page (default 20, max 50). |
maxDanmakuPerVideo | integer | Cap on comments per video. 0 = no cap. |
maxItems | integer | Overall cap on rows for the whole run. 0 = no cap. |
proxyConfiguration | object | Optional. Not required; residential proxy support is available if an address gets rate-limited. |
Output
One row per comment (the sample below is a real trending video, Chinese text as posted):
{"_input": "popular:BV1juM36LEg6","_scrapedAt": "2026-07-09T11:08:42Z","_source": "S1-danmaku-xml","bvid": "BV1juM36LEg6","aid": 116883726602536,"cid": 39758924412,"videoTitle": "再干!","part": "再干!","page": 1,"progressSec": 662.138,"mode": 5,"fontsize": 25,"color": 15772458,"colorHex": "#F0AB2A","sendTime": 1783588689,"sendTimeISO": "2026-07-09T09:18:09Z","pool": 0,"userHash": "68e23934","dmid": "2151656896334603776","text": "第二天小杨因左脚先踏进办公室而奖励1000"}
| Field | Type | Description |
|---|---|---|
bvid | string | The video's public id. |
aid | integer | The video's numeric id. |
cid | integer | Id of the specific video part these comments belong to. |
videoTitle | string | Title of the video. |
part | string | Title of the part (for multi-part videos). |
page | integer | Part number within the video. |
progressSec | number | Where in the video the comment appears, in seconds. |
mode | integer | On-screen style: 1–3 scrolling, 4 bottom, 5 top, 6 reverse, 7 advanced, 8 code, 9 special. |
fontsize | integer | Comment font size. |
color / colorHex | integer / string | Comment colour, as a number and as a hex code (#F0AB2A). |
sendTime / sendTimeISO | integer / string | When the comment was posted (Unix seconds and ISO date). |
pool | integer | Comment pool: 0 normal, 1 subtitle, 2 special. |
userHash | string | Anonymized tag for the sender (not a real identity). |
dmid | string | Unique id of the comment. |
text | string | The comment itself. |
On failure (e.g. a removed or invalid video) the actor writes an error row instead of skipping silently:
{ "_input": "...", "_scrapedAt": "...", "_error": "api_code_-404", "_errorDetail": "...", "bvid": "..." }
Notes & limits
- For very busy videos Bilibili itself serves a capped sample of roughly 3,600 comments per part — that is a source-side limit, not the actor.
- No account is required. A proxy is optional; turn on residential proxy support only if an address gets rate-limited.
- Chinese-language comments are returned exactly as posted (Unicode).