Zhihu Questions and Answers Scraper
Pricing
Pay per event
Zhihu Questions and Answers Scraper
Extract public Zhihu questions and visible answers with authors, full text, engagement counts, and timestamps from exact URLs or the current hot list.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Extract public Zhihu question and answer records as structured JSON, CSV, or Excel. The Actor accepts known question URLs or discovers current questions from Zhihu's hot list, then returns visible answer text, authors, engagement counts, and timestamps. It is useful for Chinese-language expert research, including focused zhihu stock investigations where researchers already know the relevant question threads.
No Zhihu account, browser, or API key is required for the supported public workflow.
What does this Zhihu scraper collect?
Each dataset row represents one visible answer and repeats its parent-question context. That makes the output easy to filter, group, join, or send directly to an analysis pipeline.
The Actor collects:
- question ID, canonical URL, title, excerpt, and detail HTML;
- reported question answer, follower, view, and comment counts;
- question creation and update timestamps;
- answer ID, canonical URL, excerpt, plain text, and source HTML;
- answer upvotes, comments, thanks, and favorites when Zhihu exposes them;
- answer creation and update timestamps;
- public author ID, name, profile URL, headline, follower count, and account type;
- source URL and extraction timestamp.
The Actor does not collect private profiles, private questions, login-only data, or comments.
Who is it for?
Market researchers can collect expert opinions and engagement signals from selected Chinese Q&A threads.
Brand and investment analysts can revisit known Zhihu questions about companies, products, or sectors and compare the visible answers over time.
Academic and policy researchers can preserve public question context, long-form answers, authorship, and source timestamps in a repeatable format.
Data and AI teams can feed normalized answer text into translation, topic modeling, RAG, sentiment, or qualitative coding workflows.
Monitoring teams can schedule the same URL set and compare answer IDs and engagement metrics between runs.
Why use this Actor?
- Answer-first output: one integration-friendly row per answer, not a mixed bag of articles and profiles.
- Full visible content: both plain text and source HTML are returned.
- Question context included: every answer row remains understandable after export.
- Two input routes: process exact question URLs or start from the current hot list.
- Low overhead: direct HTTP and 256 MB memory; no browser is started.
- Bounded runs: separate limits control questions, answers per question, and total output.
- Fail-closed behavior: blocked, deleted, private, or answerless pages are not reported as successful empty data.
For Zhihu articles rather than Q&A threads, use the Zhihu Article Scraper.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
startUrls | array | empty | Public https://www.zhihu.com/question/{id} URLs. |
includeHotList | boolean | true | Adds current hot-list question URLs before extraction. |
maxQuestions | integer | 10 | Maximum pages processed, from 1 to 50. |
maxAnswersPerQuestion | integer | 5 | Maximum visible embedded answers saved per question, from 1 to 20. |
maxItems | integer | 20 | Global answer-row limit, from 1 to 1,000. |
proxyConfiguration | object | direct connection | Optional Apify or custom proxy routing. |
Provide at least one startUrls item or set includeHotList to true.
Extract one known question
{"startUrls": [{ "url": "https://www.zhihu.com/question/2067235011804320517" }],"maxQuestions": 1,"maxAnswersPerQuestion": 3,"maxItems": 3}
Discover current hot questions
{"includeHotList": true,"maxQuestions": 3,"maxAnswersPerQuestion": 2,"maxItems": 6}
Monitor a fixed research set
{"startUrls": [{ "url": "https://www.zhihu.com/question/2067235011804320517" },{ "url": "https://www.zhihu.com/question/2063895390546563948" }],"maxQuestions": 2,"maxAnswersPerQuestion": 5,"maxItems": 10}
Output
Results are saved to the default Apify dataset. A representative shortened row looks like this:
{"recordType": "answer","questionId": "2066576404393583263","questionUrl": "https://www.zhihu.com/question/2066576404393583263","questionTitle": "哪些信息值得关注?","questionExcerpt": "公开问题背景摘要。","questionAnswerCount": 190,"questionFollowerCount": 899,"questionViewCount": 1204608,"answerId": "2066919777130616387","answerUrl": "https://www.zhihu.com/question/2066576404393583263/answer/2066919777130616387","answerExcerpt": "公开回答摘要。","answerContentText": "这是可公开查看的回答正文。","answerVoteupCount": 42,"answerCommentCount": 3,"answerCreatedAt": "2026-08-01T10:14:36.000Z","authorName": "Sample Author","authorUrl": "https://www.zhihu.com/people/sample-author","authorFollowerCount": 1250,"sourceUrl": "https://www.zhihu.com/question/2066576404393583263","scrapedAt": "2026-08-01T12:00:00.000Z"}
Fields can be null when Zhihu does not expose a value. The complete schema is available in the Actor's Output tab.
Getting started
- Open the Actor in Apify Console.
- Keep current hot-list discovery enabled, or paste your own public Zhihu question URLs.
- Choose how many questions and visible answers to save.
- Disable hot-list discovery if you only want the supplied URLs.
- Click Start.
- Open the Dataset tab to preview the rows.
- Export as JSON, CSV, Excel, XML, or RSS, or connect the dataset API to your pipeline.
Start with a small limit. Once the output matches your research question, increase maxQuestions or schedule the run.
How much does it cost to scrape Zhihu answers?
The Actor uses pay-per-event pricing:
- Actor start: $0.005 per run.
- Answer: tiered price per saved answer. The BRONZE tier is $0.0032 per answer; higher-volume platform tiers are lower.
At the BRONZE tier:
| Saved answers | BRONZE calculation | Estimated Actor charge |
|---|---|---|
| 5 | 0.005 + (5 × 0.0032) | 0.021 USD |
| 25 | 0.005 + (25 × 0.0032) | 0.085 USD |
| 100 | 0.005 + (100 × 0.0032) | 0.325 USD |
You are not charged an answer event for rejected pages, duplicate URLs, retries, or answers beyond your limits. Apify platform usage and optional proxy traffic can vary by account and routing configuration.
Scheduling recurring Zhihu research
A schedule turns a fixed URL set into a repeatable monitoring workflow:
- Save the Actor input as a Task.
- Add the relevant question URLs.
- Set a daily, weekly, or monthly schedule.
- Use
answerIdas the stable record key. - Compare
answerVoteupCount,answerCommentCount, andscrapedAtacross runs. - Send the dataset to your warehouse, spreadsheet, webhook, or automation platform.
The Actor emits a fresh dataset on every run. It does not silently merge historical rows or claim that an answer changed; your downstream workflow controls comparison rules.
Working with Chinese-language content
Zhihu content is normally returned in its original language. The Actor does not translate, summarize, classify, or infer sentiment. This preserves the source text for your chosen analysis method.
Useful downstream patterns include:
- translate
answerContentTextwith your preferred model or translation API; - group answers by
questionId; - rank authors by
answerVoteupCountorauthorFollowerCount; - preserve
answerContentHtmlwhen links and formatting matter; - use
answerContentTextfor embeddings, keyword analysis, or qualitative coding; - compare reported engagement with the extraction timestamp.
API usage with cURL
Replace YOUR_APIFY_TOKEN with an Apify API token:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~zhihu-questions-answers-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url":"https://www.zhihu.com/question/2067235011804320517"}],"maxAnswersPerQuestion": 3,"maxItems": 3}'
Use run-sync-get-dataset-items when a small synchronous response is more convenient:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~zhihu-questions-answers-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"includeHotList":true,"maxQuestions":1,"maxItems":2}'
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/zhihu-questions-answers-scraper').call({startUrls: [{ url: 'https://www.zhihu.com/question/2067235011804320517' }],maxAnswersPerQuestion: 3,maxItems: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/zhihu-questions-answers-scraper").call(run_input={"includeHotList": True,"maxQuestions": 2,"maxAnswersPerQuestion": 2,"maxItems": 4,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Add this Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/zhihu-questions-answers-scraper"
For Claude Desktop, Cursor, and VS Code, add this HTTP server in the client's MCP settings:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/zhihu-questions-answers-scraper"}}}
Example prompts:
- “Extract the visible answers and engagement metrics from these three Zhihu question URLs.”
- “Get two current Zhihu hot-list questions and their first two visible answers.”
- “Return the authors and plain-text answers as JSON for my research pipeline.”
Integrations
The default dataset works with Apify webhooks and integrations such as Make, Zapier, Google Sheets, Airbyte, and Keboola.
Common workflows:
- trigger a translation or summarization step after a run succeeds;
- append answer rows to a warehouse table keyed by
answerIdandscrapedAt; - notify a research team when a new answer ID appears;
- export a one-time question thread to Excel for manual coding;
- build an author shortlist from high-engagement answers;
- feed answer text into a controlled RAG index with source URLs preserved.
Limits and source behavior
Zhihu changes its public delivery surfaces and anti-automation controls. The Actor currently uses the source's public embedded question state, which exposes a bounded set of visible answers rather than complete pagination.
Important limits:
- only current public question URLs with visible embedded answers are supported;
- old, deleted, private, login-only, or answerless questions can fail;
maxAnswersPerQuestioncannot create answers that Zhihu does not embed;- keyword search is not supported; use known URLs or current hot-list discovery;
- hot-list membership changes continuously;
- counts are source-reported snapshots and can change after extraction;
- proxy routing can help regional connectivity but does not guarantee that a private or blocked page becomes public.
If every requested question fails, the Actor fails instead of returning a misleading successful empty dataset.
Troubleshooting
“The page did not contain a public question entity”
Open the URL in a private browser window. Confirm that it is a numeric Zhihu question URL and currently visible without login. Replace old or deleted examples with a current public question.
“The page did not contain public answer entities”
The question can exist while exposing no answers in public embedded state. Try another current question, enable hot-list discovery, or rerun later.
HTTP 403 or 429
Keep concurrency and limits small. Retry later or configure Apify Proxy if your region is blocked. Do not assume residential proxy traffic is necessary: direct HTTP is the tested default.
Fewer answers than requested
maxAnswersPerQuestion is a ceiling. Zhihu can expose fewer embedded answers than the requested limit, even when its reported total answer count is larger.
Responsible use and legality
This Actor accesses data visible on public Zhihu question pages. Web scraping laws and contractual rules vary by jurisdiction and purpose. You are responsible for checking Zhihu's terms, applicable law, and your lawful basis before collecting or processing data.
Do not use the Actor to:
- attempt to access private or login-only content;
- profile, harass, discriminate against, or deanonymize people;
- collect more personal data than your research purpose requires;
- republish copyrighted answer text without permission;
- bypass technical controls in a way prohibited by applicable rules.
Minimize retention, protect exports, preserve source attribution, and honor valid deletion or access requests where required.
Related Actor
- Zhihu Article Scraper — extract full public Zhuanlan article content, Markdown, authors, topics, timestamps, images, and engagement fields. Choose it when the source entity is an article rather than a Q&A thread.
FAQ
Does it require a Zhihu login?
No for the supported public workflow. The Actor does not accept or store Zhihu credentials.
Can it search Zhihu by keyword?
No. Anonymous keyword search is not part of the supported product. Supply known question URLs or use current hot-list discovery.
Does it extract every answer in a question?
No. It extracts the bounded answer set exposed in the public embedded page state. The reported questionAnswerCount can be higher than the number of returned rows.
Can I monitor answers over time?
Yes. Save a fixed set of question URLs as an Apify Task, schedule it, and compare stable answerId values and engagement counts across datasets.
Are question and answer records charged separately?
No. Each saved dataset row is one answer event and already includes its parent-question fields. There is no separate question event.
Can I export to CSV or Excel?
Yes. Use the dataset export controls in Apify Console or the dataset API.
What happens when one URL fails?
The Actor retries it up to three times and continues with other URLs. The run fails only when it cannot extract any useful answer records.