Bilibili Scraper Pro (B站)
Pricing
from $3.00 / 1,000 videos
Go to Apify Store
Bilibili Scraper Pro (B站)
Pricing
from $3.00 / 1,000 videos
Select a variant with the run option build (e.g. POST /v2/acts/WnjoFk9b09huZ8uMf/runs?build=0.2.12).
| Build | Item | Change |
|---|---|---|
| 0.2.11 | baseline | README fixes after re-review |
| 0.2.12 | 1 traffic calibration | OVERHEAD 1500→600 B; no Content-Length ⇒ decompressed×COMPRESSION_RATIO (0.25, one constant). Budget rule (≤25% revenue, 0.5 MB base, 5 MB cap) unchanged. |
| 0.2.13 | 2 tier de-escalation | On a proxy tier, probe one request direct after 20 consecutive proxy successes or 2-min cooldown; success ⇒ back to direct; failure ⇒ cooldown & streak threshold double (max 30 min). OUTPUT.proxy.tierSwitches / failedProbes. |
| 0.2.14 | 3 delay decay | After 10 consecutive successes, delayMs ×0.85 down to the user's requestDelayMs (was: only ever increased ×1.5 up to 4 s). |
| 0.2.15 | 4 cookie/WBI refresh | Guest cookie refreshed at most once per 5 min; WBI key cleared only on -352 for signed requests or signing errors; WBI key TTL 6 h→1 h. |
| 0.2.16 | 5 detail concurrency 2 | Per-video processing (detail/tags/related/comments/danmaku) runs in 2 workers; global throttle unchanged so request rate stays polite. |
| 0.2.17 | 6 net-error escalation + lean AI summary | 2 consecutive direct network errors (timeout/reset) escalate like a 412. includeAiSummary no longer forces full detail; list data + cid (pagelist) used instead. |
| 0.2.18 | 7 empty first search page retry | First search page with code 0 + 0 results ⇒ retry exactly once (kind 'no-residential': direct/datacenter only, never residential); still empty ⇒ genuine no results. OUTPUT.emptySearchRetries / emptySearchConfirmed. Mock test: dev/mock-fetch.mjs (SCENARIO=normal |
| 0.2.19 | silent-empty retry + traffic refit + lower defaults | (1) Comments: route-1 page 1 code≠0/empty while video stat.reply>0 ⇒ wait 2s, retry once kind 'no-residential'; still 0 comments after route 2 ⇒ stats.errors "Comments : empty response (code X) though video shows N comments" + OUTPUT.emptyCommentVideos. Danmaku: 0 rows while stat.danmaku>0 ⇒ retry once (never residential) ⇒ error + OUTPUT.emptyDanmakuVideos. Fixes silent 0/0/0 (run EuOaMjZitolyukuXr). (2) Traffic estimate refit: est = 4800 B/request + 0.28 × body wire estimate (was 600 B + 1.0×). Least-max-ratio fit on 14 runs with platform-measured residential GB (/workspace/tuning/results.jsonl, 0.2.12–0.2.18): est/actual 0.75–1.34 for all (small 67MX7: 0.089 vs 0.095 MB = 0.95x, was 0.022 = 0.23x; large hezMB: 0.318 vs 0.294 MB = 1.08x, was 0.426 = 1.45x). 0.2.19 validation run eq7EVDL4PocY3C7Ba: 0.0144 vs 0.0188 MB = 0.77x. (3) Defaults maxVideosPerSource 20→5, maxCommentsPerVideo 50→20 (schema, code, README). Mock: SCENARIO=emptycd |
| 0.2.20 | pricing | Comment event $0.001→$0.0007 ($0.70/1k) in PRICES + README; README: "No start fee." (removed start-fee claim). Defaults unchanged (5 videos/source, 20 comments/video). |
== build 0.2.19 platform runs (sequential, timeout 180s, 256MB, defaults 5 videos / 20 comments) == input: {searchKeywords:['原神'], fetchDetails:true, includeComments:true, danmakuMode:'summary', builtInProxyFallback:true}
| run | secs | status | video/comment/dm-summary | requests | rateLimited | emptyCmt/emptyDm | tier | est res MB | actual res MB | est dc MB | ext transfer MB | errors |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| oohx9JL0oEo7MijG6 | 29 | SUCCEEDED | 5/70/5 | 27 | 0 | 0/0 | direct | 0 | 0.0000 | 0 | 0.047 | - |
| Up7cRxgtORRcsIf3J | 28 | SUCCEEDED | 5/62/5 | 26 | 0 | 0/0 | direct | 0 | 0.0000 | 0 | 0.044 | - |
| eq7EVDL4PocY3C7Ba | 80 | SUCCEEDED | 5/64/5 | 31 | 5 | 0/0 | residential | 0.014 | 0.0188 | 0.01 | 0.086 | Comments BV1Ccpb6yETr: Rate-limited/failed after retries: /x/v2/reply/reply |
| Residential est/actual (run 3): 0.0144/0.0188 = 0.77x (within 2x). Datacenter proxy traffic is not reported separately by the platform (dcGB=0 in all usage data). |
== build 0.2.19 extra runs, R group (_debugStartProxyTier='residential', owner-only), sequential, timeout 180s, default counts ==
| run | secs | status | video/comment/dm-summary(charged) | requests d/dc/res | rateLimited | emptyCmt/emptyDm | tier | est res MB | actual res MB | ratio | errors |
|---|---|---|---|---|---|---|---|---|---|---|---|
| hd0h6OwHCvQg1tKeX | 134 | SUCCEEDED | 5/55/5 | 1/4/28 | 10 | 0/0 | residential | 0.227 | 0.2614 | 0.87x | Comments BV1zkpi6fEAo: Rate-limited/failed after retries: /x/v2/reply/reply; Comments BV1Popx66ER8: Rate-limited/failed after retries: /x/v2/reply/reply |
| CAht4qDPgC8qubr3a | 32 | SUCCEEDED | 5/67/4 | 3/3/19 | 0 | 0/0 | residential | 0.183 | 0.1902 | 0.96x | - |
| 2EqFHFWQkeNR8yHha | 37 | SUCCEEDED | 5/64/5 | 5/4/18 | 0 | 0/0 | residential | 0.19 | 0.2132 | 0.89x | - |
| raY8LOPxk1aj1ml4m | 28 | SUCCEEDED | 5/22/1 | 3/5/18 | 1 | 0/0 | residential | 0.216 | 0.2611 | 0.83x | - |
| Stopped after 4 runs: 2 rate-limited runs reached (hd0h6 rateLimited=10, 134s; raY8L rateLimited=1, 28s), both < 180s. raY8L low counts verified genuine: 4 fresh videos with 0 danmaku (summaries emitted uncharged), comments as available. |