Douban Scraper - Films, Books, Music, People and Groups
Pricing
from $2.20 / 1,000 results
Douban Scraper - Films, Books, Music, People and Groups
Extract Douban film, book and music pages, public member profiles, person filmographies and group topics as structured rows. Pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Douban Scraper
Extract Douban film, book and music pages, public member profiles, person filmographies and group topics as structured rows you can export.
- Ratings exactly as Douban keeps them, with their own scale.
- Cast and crew with their Douban IDs, long reviews, short comments and stills with uploader profiles.
- Public member profiles, with the fields Douban hides left out rather than written empty.
- One row per entity, so a review, a still and a film are counted separately and clearly.
- Pay only for the rows you receive: $3.00 per 1,000 rows on the Free plan plus a small start fee.
What does Douban Scraper do?
Douban Scraper reads the pages Douban publishes for visitors and turns them into rows. No browser, no login and no account of yours is involved, and nothing is read from a member's private area.
- Subject search (
keywords): matching titles with their rating, year and cover, in Chinese or English. - Subject details (
subjectIdswithsubjectType): one row per film, TV series, book or album, with the fields Douban shows. - Extra rows (
includeReviews,includeInterests,includeCelebrities,includePhotos): one row per review, short comment, cast member or still. Each added row is billed and counts toward the same limit. - People (
celebrityIds): a director or actor, plus one row per work withincludeWorks. - Members (
userIds): what a public profile publishes. - Group topics (
groupIds): topic rows with their authors and reply counts. - Tags (the
tagsview): the film tag list, useful for building searches.
Filling one target field picks the view automatically. All markets are supported through Douban's own site, in Simplified Chinese as Douban writes it.
What data can you extract from Douban?
Fields depend on the row type and on what Douban publishes. A value Douban does not show stays empty or null; nothing is guessed.
Subject rows (rowType: movie, tv, book, music)
| Field | Description | Example |
|---|---|---|
id | Douban subject ID | 1292052 |
title | Title as Douban writes it | 肖申克的救赎 |
url | Subject page | https://movie.douban.com/subject/1292052/ |
rating | value, max, count; max is 10 for a title | {"value": 9.7, "max": 10, "count": 3353407} |
cardSubtitle | Country, genre, director and cast summary | 美国 / 剧情 犯罪 / 弗兰克·德拉邦特 / … |
intro | The synopsis Douban publishes | 一场谋杀案使银行家安迪蒙冤入狱… |
genres | Genre list | ["剧情", "犯罪"] |
countries | Country list | ["美国"] |
durations | Running time as Douban writes it | ["142分钟"] |
languages, aka, pubdate | Language, alternate titles and release dates | ["英语"] |
year | Release year | 1994 |
isTv, episodesCount | A series is reported with rowType: tv | true, 24 |
commentCount | Number of comments Douban reports | 740000 |
actors, directors | Names with roles, as on the detail page | [{"name": "蒂姆·罗宾斯"}] |
honors | Awards Douban lists for the title | [{"kind": "获奖", "title": "奥斯卡金像奖"}] |
authors, presses | Book author and publisher | ["余华"], ["作家出版社"] |
pages, price, isbn | Book extent and identifiers | ["283"], ["28.00元"], 9787506365437 |
authorIntro, catalog | Author biography and table of contents | 余华,1960年出生… |
performers, media | Album performers and medium | ["未知艺术家"], CD |
publisher, releaseDate, discCount | Album label, date and disc count | 民族音像出版社, 2004, 1 |
barcode, isrc | Album identifiers | 9787887053411, CNM060400690 |
coverUrl | Cover image | https://img9.doubanio.com/view/subject/m/public/s1415705.jpg |
Person rows (rowType: celebrity)
| Field | Description | Example |
|---|---|---|
id | Douban person ID | 27253735 |
name | Name as Douban writes it | 蒂姆·罗宾斯 |
latinName | Latin spelling when published | Tim Robbins |
subtype | What the person is known as | 演员 |
followedCount | Followers Douban reports | 4321 |
roles, character | On a cast row: the job and the part | ["演员"], 安迪 |
subjectId | The title a cast row belongs to | 1292052 |
Member rows (rowType: user)
| Field | Description | Example |
|---|---|---|
id | Douban member ID | 3945601 |
uid | Display ID | example-member |
name | Display name | Jane Doe |
avatar | Avatar image | https://img1.doubanio.com/icon/u3945601-1.jpg |
kind | Account kind | user |
gender, ipLocation | What the profile publishes | 女, 北京 |
location | Self-declared place | 上海 |
regTime | Registration date | 2009-03-01 12:00:00 |
movieCollectedCount, bookCollectedCount | Titles marked as watched or read | 842, 96 |
joinedGroupCount, statusesCount | Groups joined and posts written | 12, 340 |
emailandphone_numberare never published on a visitor's view of a profile, so they are not written as rows or columns.followers_countreads 0 for every visitor, so it is treated as unavailable rather than as data.- A cast row and a person row can both appear in one dataset; filter on
rowTypeto work with one kind.
Review, comment, still and topic rows
| Field | Description | Example |
|---|---|---|
id | Douban ID of the review, comment, still or topic | 17796919 |
subjectId, groupId | The title or group it belongs to | 1292052, 1 |
title, abstract | Review or topic heading and opening text | 希望是好事 |
comment | The short comment itself | 看了三遍,还是会哭。 |
rating | On a comment, max is 5 | {"value": 5, "max": 5} |
usefulCount, voteCount | How many readers found it useful | 1204 |
commentsCount | Replies Douban reports | 312 |
createTime | When it was posted | 2009-06-01 21:04:00 |
description | Still caption | 安迪在雨中 |
userId, userName, userUrl | The author's public identity | 3945601, Jane Doe |
userAvatar, userRegTime, userLocation | More of the author's public profile | 上海 |
Every row also carries source (douban.com), rowType and scrapedAt.
How to scrape Douban
- Open the Actor in Apify Console. A free Apify account is enough to try it.
- Fill one target: Search terms, Film/book/music IDs, People IDs, Member IDs or Group IDs.
- Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Download the dataset or read it through the Apify API.
Empty input {} starts an example search for 肖申克的救赎, limited to 3 rows. That is a normal priced run, not a free preview. The form prefills use the same example.
With mode on Automatic, the field you filled picks the view. Search terms win over subject IDs, which win over people, members and groups. INPUT_REPORT records which view ran and what was ignored.
Subject search
Enter one or more terms in keywords. Each term is its own input with its own row allowance. A term that matches nothing ends as a successful empty run with emptyReason: NO_MATCH, which costs no row charge.
Subject details
Put IDs in subjectIds and choose subjectType: movie (films and TV series), book or music. A full Douban link works as well as the number. Switch on the extra row types you want; each review, comment, person or still is one more billed row.
People and members
celebrityIds reads a director, actor or writer, and includeWorks adds one row per work. userIds reads a public member profile.
Group topics
groupIds reads a group's topics, with pinned topics included once at the start of the list.
Tags
Pick mode: tags for the film tag vocabulary. It takes no target and returns up to maxResults tags.
What to fill in
| Field | What to enter | Default |
|---|---|---|
keywords | One or more search terms, Chinese or English | Empty; form sample 肖申克的救赎 |
subjectIds | Douban subject IDs or links | Empty; form sample 1292052 |
subjectType | movie, book or music | movie |
celebrityIds | Douban person IDs or links | Empty |
userIds | Douban member IDs | Empty |
groupIds | Douban group IDs | Empty |
mode | auto, search, subjects, celebrities, users, groups, tags | auto |
maxResults | Rows per input, 1 to 70 | 70; form sample 3 |
includeReviews | Add one row per long review | false |
includeInterests | Add one row per short comment | false |
includeCelebrities | Add one row per cast or crew member | false |
includePhotos | Add one row per still | false |
includeWorks | Add one row per work of each person | false |
cursor | An earlier RUN_SUMMARY.nextCursor | Empty |
Subject search:
{"keywords": ["肖申克的救赎"], "maxResults": 3}
Film details with extra rows:
{"subjectIds": ["1292052"], "subjectType": "movie", "includeCelebrities": true, "maxResults": 5}
Book details:
{"subjectIds": ["26748033"], "subjectType": "book", "maxResults": 2}
Album details:
{"subjectIds": ["1407080"], "subjectType": "music", "maxResults": 2}
A person with their filmography:
{"celebrityIds": ["27253735"], "includeWorks": true, "maxResults": 5}
A public member profile:
{"userIds": ["3945601"], "maxResults": 1}
Group topics:
{"groupIds": ["1"], "maxResults": 5}
The film tag list:
{"mode": "tags", "maxResults": 20}
maxItemsandlimitare accepted aliases formaxResults.- Unknown fields do not fail input resolution. Close misspellings can be corrected; others are ignored with a note.
- Input errors arrive as
INVALID_INPUT: <field> — <how to fix>, before any row is collected or charged. The start fee is separate. INPUT_REPORTin the run's key-value store records which fields were filled, normalized, inferred or ignored, including whether the example ran.
Output example
Illustrative film row, shortened to the main fields; the values are examples, not a freshly collected title:
{"source": "douban.com","rowType": "movie","entityType": "movie","id": "1292052","title": "肖申克的救赎","url": "https://movie.douban.com/subject/1292052/","year": "1994","genres": ["剧情", "犯罪"],"countries": ["美国"],"durations": ["142分钟"],"rating": {"value": 9.7, "max": 10, "count": 3353407},"cardSubtitle": "美国 / 剧情 犯罪 / 弗兰克·德拉邦特 / 蒂姆·罗宾斯 摩根·弗里曼","isTv": false,"scrapedAt": "2026-10-26T09:00:00+00:00"}
You can export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table.
Why use this Douban scraper?
- Pay per delivered row. A film, a review, a comment, a person and a still each cost the same and are counted separately.
- Ratings keep their scale. A title rating stays on Douban's 10-point scale and a comment's rating on its 5-point scale, so an average is never silently wrong.
- Useful partial results. If a title or group cannot be read, the rows already collected are still delivered with a warning that says what was left out.
- Explainable empty fields. A field Douban does not publish stays empty instead of being filled with a guess, and a query Douban blocks is reported as out of scope rather than as "no results".
- Several inputs per run. Several search terms or IDs run in one go, each with its own allowance.
- No proxy setup. You do not need proxies, cookies or a Douban account.
How much does it cost to scrape Douban?
The Actor uses pay-per-event pricing. The start event costs $0.005, charged once per GB of run memory with a minimum of one event. At the default 512 MB, one start costs $0.005. Platform usage is included in these prices.
| Apify plan | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.0030 | $3.00 |
| Starter | $0.0030 | $3.00 |
| Scale | $0.0026 | $2.60 |
| Business | $0.0022 | $2.20 |
maxResults applies to each input: each search term, subject ID, person ID, member ID or group. Its default is 70, not a promise of 70 matches. A larger request is collected in parts. Every row type shares the allowance of its input, so switching on extra rows does not add a separate allowance.
Free Apify plan runs are capped at 200 rows, with 10 runs of this Actor in total. Paid plans remove that run-count restriction, but row limits, what the site publishes and your spending limit still apply. The whole run is capped by Maximum cost per run (maxTotalChargeUsd in the API).
Example: one search delivering 3 rows on the Free plan costs 3 × $0.003 + $0.005 = $0.014. A run with no rows has no row charge; it can still incur the start fee.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this Actor to a client that supports remote MCP servers:
https://mcp.apify.com?tools=lentic_clockss/douban-scraper
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/douban-scraper with APIFY_TOKEN set.
Example prompt: "Read the Douban film page 1292052 and return its title, rating and cast."
Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/douban-scraper").call(run_input={"subjectIds": ["1292052"], "subjectType": "movie", "maxResults": 1})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/douban-scraper').call({subjectIds: ['1292052'], subjectType: 'movie', maxResults: 1});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send the JSON input to POST https://api.apify.com/v2/acts/lentic_clockss~douban-scraper/runs, with Authorization: Bearer <YOUR_APIFY_TOKEN>. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json, using the run's defaultDatasetId.
Integrations
Use Apify integrations with Google Sheets, Make, Zapier, n8n, Slack or Airtable, or connect a webhook. Use Apify Schedules for recurring runs.
FAQ
Is it legal to scrape Douban?
This Actor collects information Douban publishes to visitors. You are responsible for checking Douban's terms and applicable data-protection law, including China's Personal Information Protection Law. Personal data needs a lawful basis for collection and use; public visibility alone does not settle that question.
Why did my run end as ABORTED?
Check the run log and status message to identify why it stopped, including whether it was aborted by hand. An aborted run may have delivered rows already, so inspect the dataset before starting another.
How many results can I get?
maxResults is the row limit for each input, default 70. One subject ID normally yields one row per requested row type; a search term yields as many matching titles as Douban returns, up to the limit. The Free plan caps a run at 200 rows, and your maximum cost can stop a run earlier.
Why are some fields empty?
Douban does not publish every field for every title. A film without a rating has too few votes; a profile hides its email address and phone number; an album page may lack a barcode. Empty means "not published", not "not collected".
Why did a rating come back as null?
Douban shows no average until enough people have rated a title. The row still carries the rating scale so you can see what a value would mean.
Why do two row types have different rating scales?
A title rating is Douban's 10-point community score; a short comment carries the commenter's own 5-point score. Each row states its own max, so you can compare them without guessing.
Why are there several rowType values in one dataset?
Extra row types are opt-in and each is a separate entity, so a review and the film it belongs to are separate rows. Filter on rowType to work with one kind at a time.
Can I continue a large search?
Pass the RUN_SUMMARY.nextCursor value back as cursor with the same input. A cursor continues that input only, and it is left out when the maximum cost stopped delivery early.
Do I need a Douban account?
No. The Actor reads pages Douban shows to visitors and never posts, rates or follows anything on your behalf.
Limitations
- Fields follow what Douban publishes today. A layout change can leave a field empty until the Actor is updated.
- A member profile shows only the public view: no email address, no phone number, and the follower count Douban reports to visitors is always 0.
- A group's topic rows carry the topic text Douban shows in the list, not the full post body.
- Album pages publish fewer fields than film pages; a track list is not available.
- Ratings and counts are community figures at the time of the run and change over time.
- The site occasionally answers a visitor with a challenge page. The Actor reports that as a failed run; running again later usually works.
Related scrapers
More social media and video scrapers from the same publisher:
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.