Douban Scraper - Films, Books, Music, People and Groups avatar

Douban Scraper - Films, Books, Music, People and Groups

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Douban Scraper - Films, Books, Music, People and Groups

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

kane liu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

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 (subjectIds with subjectType): 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 with includeWorks.
  • Members (userIds): what a public profile publishes.
  • Group topics (groupIds): topic rows with their authors and reply counts.
  • Tags (the tags view): 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)

FieldDescriptionExample
idDouban subject ID1292052
titleTitle as Douban writes it肖申克的救赎
urlSubject pagehttps://movie.douban.com/subject/1292052/
ratingvalue, max, count; max is 10 for a title{"value": 9.7, "max": 10, "count": 3353407}
cardSubtitleCountry, genre, director and cast summary美国 / 剧情 犯罪 / 弗兰克·德拉邦特 / …
introThe synopsis Douban publishes一场谋杀案使银行家安迪蒙冤入狱…
genresGenre list["剧情", "犯罪"]
countriesCountry list["美国"]
durationsRunning time as Douban writes it["142分钟"]
languages, aka, pubdateLanguage, alternate titles and release dates["英语"]
yearRelease year1994
isTv, episodesCountA series is reported with rowType: tvtrue, 24
commentCountNumber of comments Douban reports740000
actors, directorsNames with roles, as on the detail page[{"name": "蒂姆·罗宾斯"}]
honorsAwards Douban lists for the title[{"kind": "获奖", "title": "奥斯卡金像奖"}]
authors, pressesBook author and publisher["余华"], ["作家出版社"]
pages, price, isbnBook extent and identifiers["283"], ["28.00元"], 9787506365437
authorIntro, catalogAuthor biography and table of contents余华,1960年出生…
performers, mediaAlbum performers and medium["未知艺术家"], CD
publisher, releaseDate, discCountAlbum label, date and disc count民族音像出版社, 2004, 1
barcode, isrcAlbum identifiers9787887053411, CNM060400690
coverUrlCover imagehttps://img9.doubanio.com/view/subject/m/public/s1415705.jpg

Person rows (rowType: celebrity)

FieldDescriptionExample
idDouban person ID27253735
nameName as Douban writes it蒂姆·罗宾斯
latinNameLatin spelling when publishedTim Robbins
subtypeWhat the person is known as演员
followedCountFollowers Douban reports4321
roles, characterOn a cast row: the job and the part["演员"], 安迪
subjectIdThe title a cast row belongs to1292052

Member rows (rowType: user)

FieldDescriptionExample
idDouban member ID3945601
uidDisplay IDexample-member
nameDisplay nameJane Doe
avatarAvatar imagehttps://img1.doubanio.com/icon/u3945601-1.jpg
kindAccount kinduser
gender, ipLocationWhat the profile publishes女, 北京
locationSelf-declared place上海
regTimeRegistration date2009-03-01 12:00:00
movieCollectedCount, bookCollectedCountTitles marked as watched or read842, 96
joinedGroupCount, statusesCountGroups joined and posts written12, 340
  • email and phone_number are never published on a visitor's view of a profile, so they are not written as rows or columns.
  • followers_count reads 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 rowType to work with one kind.

Review, comment, still and topic rows

FieldDescriptionExample
idDouban ID of the review, comment, still or topic17796919
subjectId, groupIdThe title or group it belongs to1292052, 1
title, abstractReview or topic heading and opening text希望是好事
commentThe short comment itself看了三遍,还是会哭。
ratingOn a comment, max is 5{"value": 5, "max": 5}
usefulCount, voteCountHow many readers found it useful1204
commentsCountReplies Douban reports312
createTimeWhen it was posted2009-06-01 21:04:00
descriptionStill caption安迪在雨中
userId, userName, userUrlThe author's public identity3945601, Jane Doe
userAvatar, userRegTime, userLocationMore of the author's public profile上海

Every row also carries source (douban.com), rowType and scrapedAt.

How to scrape Douban

  1. Open the Actor in Apify Console. A free Apify account is enough to try it.
  2. Fill one target: Search terms, Film/book/music IDs, People IDs, Member IDs or Group IDs.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. 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.

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

FieldWhat to enterDefault
keywordsOne or more search terms, Chinese or EnglishEmpty; form sample 肖申克的救赎
subjectIdsDouban subject IDs or linksEmpty; form sample 1292052
subjectTypemovie, book or musicmovie
celebrityIdsDouban person IDs or linksEmpty
userIdsDouban member IDsEmpty
groupIdsDouban group IDsEmpty
modeauto, search, subjects, celebrities, users, groups, tagsauto
maxResultsRows per input, 1 to 7070; form sample 3
includeReviewsAdd one row per long reviewfalse
includeInterestsAdd one row per short commentfalse
includeCelebritiesAdd one row per cast or crew memberfalse
includePhotosAdd one row per stillfalse
includeWorksAdd one row per work of each personfalse
cursorAn earlier RUN_SUMMARY.nextCursorEmpty

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}
  • maxItems and limit are accepted aliases for maxResults.
  • 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_REPORT in 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 planPrice per rowPrice 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 ApifyClient
client = 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

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.

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.

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.