Zhihu Scraper: Question Answers, Votes & Authors, No Login avatar

Zhihu Scraper: Question Answers, Votes & Authors, No Login

Pricing

from $1.89 / 1,000 answers

Go to Apify Store
Zhihu Scraper: Question Answers, Votes & Authors, No Login

Zhihu Scraper: Question Answers, Votes & Authors, No Login

Collect public answers from Zhihu (知乎) questions with no login: full text, HTML, images, author, upvotes and date. Research what Chinese users say about a topic or product. Paste a question URL or ID and export to JSON, CSV or Excel.

Pricing

from $1.89 / 1,000 answers

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Categories

Features

Limited permissions

Share

Paste a Zhihu (知乎) question URL or ID and get its public answers as a table: full text, HTML, image links, author, upvotes, date and link. No login, cookies or API key.

Use it to research what Chinese users say about a topic or product. A first run of 20 answers usually takes 3 to 8 seconds, or about 30 seconds if the connection to Zhihu has to be retried, and costs $0.0553 on the Free plan.

Zhihu Scraper: paste a question URL or ID, get answers with text, author, votes and date, then export to JSON, CSV or Excel

Table of contents

What it does

This Actor reads the public answers of the Zhihu questions you give it. It saves one row per answer. Each row has the question title, answer text, answer HTML, image and video links, author name and bio, upvotes, downvotes, publication date and answer link.

It works only with questions you name. It does not search Zhihu by keyword. It does not collect comment text, user profiles or articles.

Good fit

  • You want to know what Chinese users think about a product, brand or topic, and you already have the question links.
  • You compare opinions across several Zhihu questions in one table.
  • You want answer text in your own research, translation or AI workflow.
  • You need a CSV or Excel file of answers without a Zhihu account.

👉 Try it now: open the input form

How it works

  1. The Actor reads your list of questions. It accepts browser links and plain numeric IDs, and it removes duplicates.
  2. It opens the public version of each question that Zhihu shows without a login, and it goes through the answers page by page.
  3. It saves each answer as one row, until it reaches your limit or the end of the question.
  4. It writes a run summary that shows what happened with each question.

👉 Try it now: open the input form

Quick start

Input form: box 1 shows the question URL, box 2 shows the maximum number of answers

  1. Open the Input tab. Keep the example question or paste your own URL or ID in Question URLs or IDs (box 1).

  2. Keep Maximum answers at 20 for a first test (box 2).

  3. Click Start.

  4. Open the Output tab when the run ends. Read the author, answer text, upvotes and date in the Answers table (box 4).

    Output table: author, answer text, upvotes and date for each answer

Expected result: 20 rows, one per answer, usually in 3 to 8 seconds, or about 30 seconds if the connection to Zhihu has to be retried. The slowest run took 43 seconds.

👉 Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Learn what users say about a producturls with one or more questionsAnswercontent, voteups, createdAtCSV or Excel for review
Find the answers people agree with mosturls, higher maxItemsAnswervoteups, content, urlSort by voteups in your sheet
Prepare Chinese text for translation or AI analysisurlsAnswercontent, contentHtml, sourceLanguageAPI or MCP
Collect image links from answersurlsAnswermedia, urlYour own review tool
Get a short summary in your team toolurls, deliveryConnector, deliveryTargetAnswer summaryauthor, content, urlSlack or Notion

👉 Try it now: open the input form

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
urlsQuestion URLs or IDsList of textYesNo default; prefill is one example questionA zhihu.com/question/<ID> link or a numeric ID, up to 100 per runSets which questions to readhttps://www.zhihu.com/question/19805218Start with one question
maxItemsMaximum answersWhole numberNoDefault 20, prefill 201 to 10,000Total answers across all questions20Raise the run timeout above 300 seconds for more than about 500 answers
includeAnswerDetailsInclude comment countsTrue or falseNofalsetrue, falseTries to get a comment count for each answerfalseKeep it off unless you need this number
deliveryConnectorSend results toConnectorNoEmptyYour MCP connectorPosts a short summary after the runYour Slack connectorLeave empty if you only need the table
deliveryTargetNotion page or channelTextNoEmptyNotion page link or Slack channel IDSets where the summary goesA Notion page linkUse it with deliveryConnector

An empty urls list stops the run with a clear message. Links with www., m. or no https:// work, and the Actor ignores anything after ? or #. The same question given twice counts once. An answer link such as /question/1/answer/2 is rejected, because the Actor reads whole questions.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Several questionsurlsmaxItemsThe limit is shared. Questions run in order until the limit is reached2 questions, limit 100If the first question fills the limit, the second is not read. The run summary lists it
Comment counts onincludeAnswerDetailsmaxItemsEach answer takes 2.5 to 4.5 seconds longerRuns saved 100 answers in 259 to 272 seconds. One stopped at the 300 second timeout with 60 answers after connection failures. Set a timeout of 600 seconds or more for over 50 answersSame price, much slower
Large runsmaxItemsRun timeoutThe run stops before the timeout and keeps saved rows1,000 answers took about 6 to 8.5 minutesYou pay only for saved answers
Cost capmaxItemsMaximum cost per runThe run stops when the next answer would pass your capA cap of $0.008 pays for 2 answers on Free and Bronze, 3 on Silver and higherThe status says the limit stopped the run

Input examples

One question

{
"urls": ["https://www.zhihu.com/question/19805218"],
"maxItems": 20
}

Expected behavior: the Actor saves the first 20 answers that Zhihu returns. Expected output: rows with title, author, content, voteups and createdAt. Limit or cost note: $0.0553 on the Free plan.

Several questions, by ID

{
"urls": ["19805218", "https://www.zhihu.com/question/28479292"],
"maxItems": 200
}

Expected behavior: the Actor reads the first question, then the second, until it saves 200 answers in total. Limit or cost note: one question fee for each question the Actor checks, plus one fee per saved answer.

👉 Try it now: open the input form

Output

Output fields

The Answers table shows the main fields. Choose All fields to see the rest.

FieldMeaningTypeCan be empty?Example / enumSource / notes
questionIdZhihu question IDTextNo19805218From your input
titleQuestion titleTextYes哪些便宜好用的家用咖啡机值得推荐?As shown on Zhihu
answerIdAnswer IDTextNo2734473811Kept as text so long IDs stay correct
authorPublic author nameTextYesevanxuNull when Zhihu shows no name
authorBioShort description the author shows on ZhihuTextYes你身边最懂吃喝的好朋友Null when the author has none
authorAvatarUrlLink to the author pictureLinkYeshttps://pic1.zhimg.com/v2-41a177c2ccfe082635b8cb92b6cdea73_l.jpg?source=57bf9c9bThe file is not downloaded
contentAnswer textTextYes题主,不知道多便宜算便宜…Null for image-only answers
contentHtmlAnswer HTMLTextYes<p>…</p>Active scripts and tracking images are removed
mediaImage, audio and video linksListCan be an empty list[{"type":"image","url":"https://pic1.zhimg.com/…"}]Links only, files are not downloaded
voteupsUpvotesNumberYes14Number reported by Zhihu
downvotesDownvotesNumberYes0Number reported by Zhihu
commentsComment countNumberYesnullNull unless includeAnswerDetails is on and Zhihu returns it
createdAtPublication time in UTCDateYes2023-01-06T13:02:02.000Z
urlAnswer linkLinkNohttps://www.zhihu.com/question/19805218/answer/2734473811
sourceAnswerCountAnswers on the question, as reported by ZhihuNumberYes136Can differ from what Zhihu returns without a login
detailStatusResult of the comment count lookupTextNonot_requested, available, unavailable, deadline
sourceUrlPublic page used to read the answerLinkNohttps://www.zhihu.com/tardis/landing/m/360/qus/19805218
fetchedAtCollection time in UTCDateNo2026-11-06T08:48:27.711Z
sourceSource domainTextNozhihu.com
sourceLanguageLanguage of the sourceTextNozh
contentVariantOriginal text or notTextNooriginalThe Actor does not translate
typeRecord typeTextNoanswer

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset, Answers table, APIOne row per answerOpen or export the table
Question with no public answersRUN_SUMMARY, status messageNo rows for it. Without a login Zhihu often gives the same reply for an empty, closed or missing question, so it is usually listed as failed with SOURCE_UNAVAILABLE or UNVERIFIED_EMPTY. It is complete with 0 saved only when Zhihu confirms the question and its zero countTry another question
Partial resultDataset, RUN_SUMMARY, status messageSaved rows stay. The summary gives the stop reason and any questions not readRaise the limit, cap or timeout
Question Zhihu does not returnRUN_SUMMARY, status messageListed as failed with SOURCE_UNAVAILABLE. The run still succeeds if other questions gave answersCheck the URL or try another question
Zhihu ends its public list earlyDataset, RUN_SUMMARY, status messageSaved rows stay and the run succeeds with partial and PUBLIC_LIST_END. sourceAnswerCount shows the total Zhihu reports. A long pause on Zhihu's side can look the sameIf you expected more answers, run it again later. A second run that stops at the same place means that is the public list
Technical failureDataset, RUN_SUMMARY, status messageThe run is marked Failed, even if some rows were saved. Saved rows stay and you pay only for them. The summary gives the reason, such as NETWORK_ERROR, RATE_LIMITED, SOURCE_BLOCKED, SOURCE_ERROR, RESPONSE_TOO_LARGE or UNREADABLE_ANSWERS. After 2 questions in a row end this way, the run stops and lists the unread questions, which you do not pay for. NO_ANSWERS_LIMIT stops the run the same way after about 4 minutes or 20 MB with no answers saved. A question already started at that moment keeps its question-checked chargeTry again later

Two cases are best-effort and do not fail the run. A question Zhihu does not return (SOURCE_UNAVAILABLE, UNVERIFIED_EMPTY) is one, if other questions gave answers. A public list that ends early with saved rows (PUBLIC_LIST_END) is the other. Reaching maxItems, your cost cap or the timeout with saved rows is also a successful run with the status partial.

Output example

{
"type": "answer",
"questionId": "19805218",
"title": "哪些便宜好用的家用咖啡机值得推荐?",
"answerId": "2734473811",
"author": "evanxu",
"authorBio": "创业 | 咖啡爱好者 | 数码家居评测",
"authorAvatarUrl": "https://pic1.zhimg.com/v2-41a177c2ccfe082635b8cb92b6cdea73_l.jpg?source=57bf9c9b",
"content": "题主,不知道多便宜算便宜,比如100元不到的法压壶?…",
"contentHtml": "<p>题主,不知道多便宜算便宜…</p>",
"media": [
{ "type": "image", "url": "https://pic1.zhimg.com/v2-b4fbe06ef907d0a0d26af950ce363492_b.gif" }
],
"voteups": 14,
"downvotes": 0,
"comments": null,
"createdAt": "2023-01-06T13:02:02.000Z",
"url": "https://www.zhihu.com/question/19805218/answer/2734473811",
"source": "zhihu.com",
"sourceUrl": "https://www.zhihu.com/tardis/landing/m/360/qus/19805218",
"sourceLanguage": "zh",
"contentVariant": "original",
"sourceAnswerCount": 136,
"fetchedAt": "2026-11-06T08:48:27.711Z",
"detailStatus": "not_requested"
}

This is one row from the first example, with content and contentHtml trimmed. A null value means Zhihu did not return that value, or that you did not ask for it.

Send results to Slack or Notion

Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console → MCP connectors.

Use case → fields

Buyer jobInput pathOutput entityKey fieldsNext integration
Product opinion researchurlsAnswercontent, voteups, createdAtCSV or Excel
Most supported answersurls, maxItemsAnswervoteups, author, urlYour spreadsheet
Translation or AI analysisurlsAnswercontent, sourceLanguageAPI or MCP

👉 Try it now: open the input form

Pricing

Pricing unit

You pay per event. Platform usage is included in these prices.

EventWhen it is chargedFreeBronzeSilverGold and higher
Actor startOnce per run, per GB of run memory (minimum one)$0.0008$0.0008$0.0008$0.0008
Question checkedOnce for each valid question the Actor checks$0.0005$0.00045$0.0004$0.00035
AnswerOnce for each saved answer$0.0027$0.00243$0.00216$0.00189

The start fee grows with run memory. The default 256 MB counts as one start fee.

  • Question with no answers, a question Zhihu does not return, or a connection failure on it: you pay the start fee and the question fee, and nothing for answers. The question fee is charged before the Actor contacts Zhihu.
  • Invalid input: the run stops before it checks any question, so you pay only the start fee.
  • Partial or failed run: you pay for the questions checked and the answers actually saved.
  • Comment counts: no extra charge.

Cost examples

ScenarioInput scopeExpected item/event countFreeBronzeSilverGold and higherStop/cap behavior
Smallest1 question1 answer$0.0040$0.0037$0.0034$0.0030Stops at maxItems
First test1 question20 answers$0.0553$0.0499$0.0444$0.0390Stops at maxItems
Normal1 question100 answers$0.2713$0.2443$0.2172$0.1902Stops at maxItems or your cost cap
Large1 question1,000 answers$2.7013$2.4313$2.1612$1.8912Needs a longer timeout

A run needs a maximum cost of at least $0.004. Apify refuses a lower cap before the run starts. If the money left is less than one question plus one answer, the Actor does not read the next question and says why.

👉 Try it now: open the input form

Limits

  • No keyword search. You must give question URLs or IDs.
  • Some questions need a login. Zhihu does not return every question without one. In our tests 19550225 and 20702054 gave no answers. The Actor does not use accounts or cookies, so it reports these questions as failed.
  • Answer count can be lower than on the website. The Actor saves what Zhihu returns without a login. sourceAnswerCount is the number Zhihu reports. Zhihu's pages can overlap, so if a question comes up short the Actor reads it again, up to 2 more times, and charges only for new answers. A second read can double or triple the time for that question, and the timeout still stops the run with saved rows.
  • Very large questions end early. Zhihu can stop listing answers before the total it reports. One question reporting 1,613 answers listed 1,122 without a login, and those runs took about 8 to 9 minutes. The run keeps those rows, ends as a success with the status partial and the reason PUBLIC_LIST_END, and you pay only for saved answers.
  • Comment counts are often empty. Zhihu usually asks for a login for this number. In our tests about 1 answer in 7 had a count: 12 of 100 in one run and 9 of 60 in another. Comment text and replies are not collected.
  • Not collected: full user profiles, follower counts, articles, number of saves, and changes over time.
  • Media are links. Files are not downloaded, and links on Zhihu's servers can stop working.
  • Speed. The Actor waits about 1 second between requests. We measured 100 answers in 19 to 82 seconds (the slowest run had connection failures), 1 to 2.5 minutes for 200 answers from 2 questions, and about 6 to 8.5 minutes for 1,000 answers. With the default 300 second timeout, plan for about 500 answers, or fewer if a question has to be read again or the connection fails. A connection failure in the middle of a question adds pauses of 10 and 30 seconds. If Zhihu rejects a page, the Actor asks for fewer answers and then tries once more after 10 seconds, so a question that ends this way takes about 15 seconds instead of 3. After four pauses of either kind with no answers saved in between, the Actor stops pausing. If about 4 minutes or 20 MB pass with no answers saved, the run stops with NO_ANSWERS_LIMIT, at any timeout, so a list of failing questions does not stall. Pages read again to fill gaps count too, so a very large question can rarely stop this way, and its saved rows stay.
  • Requests. Each request to Zhihu waits up to 8 seconds and is tried up to 3 times. The run stops about 20 seconds before its timeout and keeps the saved rows.
  • Connection failures. If the connection to Zhihu fails in the middle of a question, the Actor pauses for 10 seconds and then 30 seconds and continues from the same place, within the limit of four pauses described above. If it still fails, that question stops with NETWORK_ERROR, the saved rows stay, and you pay only for them. In one earlier test, before these pauses were added, a run stopped at 159 of 200 answers this way.
  • One bad answer does not stop a run. If Zhihu returns an answer the Actor cannot read, it skips that answer, does not charge for it, and counts it as skippedCards in the run summary. The same applies to a response over 8 MB: the Actor asks for 20 answers, then 3, then 1, and skips the one that is too large. After 3 such answers in a row, it stops that question. If nothing in a question can be read, the question fails with UNREADABLE_ANSWERS instead of looking empty, and two such failures in a row stop the run.
  • Answer order. Answers come in the order Zhihu returns them. The Actor does not sort them.
  • Your use of the data. Answers are written by Zhihu users and can be protected by copyright. The Actor does not give you a license to republish them. Check the rules that apply to you.

👉 Try it now: open the input form

API, export and integrations

  • API: start a run with the same JSON as the input form, then read the rows from the run's default dataset.
  • Export: download JSON, CSV or Excel from the Output tab or through the dataset API.
  • Scheduling: run the same questions on an Apify schedule. Each run saves the answers again, so compare runs by answerId.
  • Webhooks / no-code: use an Apify webhook or integration when a run finishes, then read the dataset rows in your tool.
  • Run summary: the RUN_SUMMARY record in the run's key-value store gives the result for each question.

Use with AI agents (MCP)

MCP server URL with only this Actor:

https://mcp.apify.com?tools=cliqtomedia/zhihu-scraper

Smallest useful input:

{
"urls": ["https://www.zhihu.com/question/19805218"],
"maxItems": 20
}

Key output fields: title is the question, content is the answer text in Chinese, author is the public author name, voteups is the number of upvotes, and url is the answer link.

A run of 20 answers usually takes 3 to 8 seconds, about 30 seconds if the connection has to be retried, 43 seconds at worst so far, and costs $0.0553 on the Free plan. The input needs question URLs or IDs, not search words. A question can come back as failed if Zhihu requires a login for it.

👉 Try it now: open the input form

Troubleshooting

Question reported as not public

Symptom: the status says "Zhihu did not return this question publicly". Likely reason: the question needs a login, or the ID is wrong. Check: open the link in a private browser window. Action: try another question. You paid only the start and question fees for it.

Input rejected

Symptom: the run stops with "Line 1 in "urls" is one answer, not a question" or "is not a Zhihu question". Likely reason: the line has an answer link, a link to another page, or a typing error. Check: the line named in the message. Action: use https://www.zhihu.com/question/<ID> or only the number.

Fewer answers than expected

Symptom: the table has fewer rows than maxItems or than the number on the website. Likely reason: the question ended, Zhihu stopped listing answers without a login (PUBLIC_LIST_END), the run timed out, or your cost cap stopped it. Check: stopReason and sourceAnswerCount in RUN_SUMMARY. Action: raise the timeout or cost cap if one of them stopped the run. Otherwise, this is all Zhihu returned.

Comment count is empty

Symptom: comments is null. Likely reason: the option is off, or Zhihu asked for a login for that number. Check: detailStatus shows not_requested or unavailable. Action: turn on Include comment counts if it is off. Otherwise the number is not available without a login.

Zhihu stopped returning answers

Symptom: the status says "Zhihu limited the requests", "Zhihu returned an unexpected error" "Zhihu stopped returning answers before the end of the list", "Zhihu returned answers in a form the Actor could not read" or "Stopped early: about 4 minutes or 20 MB passed with no answers saved". Likely reason: Zhihu limited requests, refused them or returned an unexpected error, or the connection failed. The run is marked Failed. Check: stopReason for that question in RUN_SUMMARY. Action: keep the saved rows and try again later. You pay only for answers already saved. Questions listed in unprocessedInputs were not finished, so run them again.

Run failed with no rows

Symptom: the run status is Failed and the table is empty. Likely reason: Zhihu did not respond or returned an answer page that could not be confirmed. Check: the status message and RUN_SUMMARY. Action: try again later. If it repeats, open an issue with the run ID.

👉 Try it now: open the input form

FAQ

Do I need a Zhihu account or cookies?

No. The Actor reads only what Zhihu shows without a login. It never asks for an account, cookies or an API key.

Can I search Zhihu by keyword?

No. Find the question on Zhihu or in a search engine first, then paste its link.

Why are there fewer answers than on the website?

The website can show more to signed-in users. The Actor saves what Zhihu returns without a login, up to your limit. We cannot promise every answer of every question.

Are the answers translated?

No. You get the original text, usually in Chinese. contentVariant is original and sourceLanguage is zh.

What do I pay if a question gives no answers?

Only the start fee and the question fee: $0.0013 on the Free plan for one question.

👉 Try it now: open the input form

👉 Try it now: open the input form

Support

For a bug, question or feature request, open the Issues tab of this Actor on Apify. Include the run ID, your input and the status message. Never send tokens, cookies or private data.

👉 Try it now: open the input form