# Zhihu Search Scraper: Q\&A (`maximedupre/zhihu`) Actor

Search public Zhihu by keyword, or open questions, articles, columns, videos, comments, and creator pages. Get structured records with source links, available text, authors, engagement, dates, and related public context.

- **URL**: https://apify.com/maximedupre/zhihu.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Developer tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 content matches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🔎 Find public Zhihu research records

For researchers, product teams, marketers, and developers, Zhihu Search Scraper searches public Zhihu or opens known public pages. It returns structured records with source links, available text, authors, engagement counts, dates, and links between questions, answers, articles, comments, columns, media, and profiles. Use the rows to review public discussions, compare topics, find creators, or export research data.

- Search public Zhihu topics about stocks with **[Zhihu Stock](https://apify.com/maximedupre/zhihu/examples/zhihu-stock)**.
- Explore public Zhihu discussions about **[Baidu Search Engine](https://apify.com/maximedupre/zhihu/examples/baidu-search-engine)**.
- Find public Zhihu discussions about **[Baidu Stock](https://apify.com/maximedupre/zhihu/examples/baidu-stock)**.
- Review public Zhihu discussions about **[Douyin](https://apify.com/maximedupre/zhihu/examples/douyin)**.
- Search public Zhihu topics about **[Baidu](https://apify.com/maximedupre/zhihu/examples/baidu)**.
- Search public Zhihu discussions about **[Chinese to English](https://apify.com/maximedupre/zhihu/examples/chinese-to-english)**.

#### 📚 Explore Zhihu research records

The dataset has nine record types: answers, questions, hot questions, articles, column articles, videos, comments, comment replies, and creator profiles. Each row has a `recordType` and a required `source.url`. Other fields appear when the public source provides them.

The Actor saves the first eligible occurrence of a source item as soon as it finds it. If the same item appears later through another keyword, URL, handle, or ID, the later match is ignored and does not rewrite the saved row. `source.discoveryInput` shows the one input that first led to the saved row.

Missing public values are left out. When the source does not expose a data area, `sourceGaps` can name that gap. Public source text, identifiers, and URLs stay as returned by Zhihu.

#### ▶️ Choose a Zhihu collection

1. Choose one target in the Input tab.
2. For `keywordSearch`, enter one keyword or phrase and choose the content types, filters, and order.
3. For another target, add the matching public URL or URLs, such as question, article, column, video, content, comment, or creator URLs.
4. Set `maxItems` when you want fewer rows to review. Leave it empty to return all available results until the source is exhausted.
5. Run the Actor and open the `results` link to view the default dataset.

Use another run for a different keyword. The Actor handles public pages only. It does not cover private, deleted, login-only, paywalled, or otherwise restricted Zhihu content. It does not write to Zhihu or create summaries, translations, sentiment labels, or other derived analysis.

#### ⚙️ Input

**Public input example**

This is the public input from the successful current-beta default-input run:

```json
{
  "target": "keywordSearch",
  "keyword": "machine learning",
  "contentTypes": [
    "answers"
  ],
  "sortBy": "relevance",
  "maxItems": 23
}
```

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string, required | Chooses one target: `keywordSearch`, `hotQuestions`, `questionAnswers`, `article`, `columnArticles`, `video`, `comments`, `commentReplies`, `creatorProfile`, or `creatorArticles`. Values in other target sections are ignored. |
| `keyword` | string | Searches public Zhihu with one keyword or phrase. Use another run for a different search. |
| `contentTypes` | array of strings | Limits keyword search to `answers`, `questions`, `articles`, `videos`, `columns`, or `people`. Leave it empty to search all supported types. |
| `topicCategories` | array of strings | Keeps keyword results with the listed topic categories. Leave it empty to use all categories. |
| `hotOnly` | boolean | Keeps only keyword results that belong to the current Zhihu hot list. |
| `minimumTopAnswerVotes` | integer | Keeps keyword results whose top answer has at least this many votes. Leave it empty to skip this filter. |
| `publishedFrom` | string, `YYYY-MM-DD` | Keeps keyword results published on or after this UTC date. Leave it empty for no start date. |
| `publishedTo` | string, `YYYY-MM-DD` | Keeps keyword results published on or before this UTC date. Leave it empty for no end date. |
| `sortBy` | string | Orders keyword results by `relevance`, `newest`, or `votes`. |
| `questionUrls` | array of objects | Supplies one or more public Zhihu question URLs for answer collection. |
| `questionUrls[].url` | string | A public Zhihu question URL. |
| `articleUrls` | array of objects | Supplies one or more public Zhihu article URLs for article detail collection. |
| `articleUrls[].url` | string | A public Zhihu article URL. |
| `columnUrls` | array of objects | Supplies one or more public Zhihu column URLs for column article listings. |
| `columnUrls[].url` | string | A public Zhihu column URL. |
| `videoUrls` | array of objects | Supplies one or more public Zhihu video URLs for video collection. |
| `videoUrls[].url` | string | A public Zhihu video URL. |
| `contentUrls` | array of objects | Supplies one or more public Zhihu question, answer, article, or video URLs for top-level comment collection. |
| `contentUrls[].url` | string | A public Zhihu question, answer, article, or video URL. |
| `commentSort` | string | Orders top-level comments by `popular` or `newest`. Leave it empty for Zhihu's normal comment order. |
| `commentUrls` | array of objects | Supplies one or more public Zhihu comment URLs for reply collection. |
| `commentUrls[].url` | string | A public Zhihu comment URL. |
| `creatorUrls` | array of objects | Supplies one or more public Zhihu creator profile URLs for creator profiles or creator article listings. |
| `creatorUrls[].url` | string | A public Zhihu creator profile URL. |
| `maxItems` | integer | Stops after this many records for the selected target. Leave it empty to return all available results until the source is exhausted. |

#### 🧾 Output

**Run output fields**

| Field | Type | What it does |
| --- | --- | --- |
| `results` | string URL | Opens the default overview view of the saved dataset. |

The tables below list the complete public fields for each record shape. Dotted paths describe fields inside an object or an array item. A field is omitted when Zhihu does not expose it for that row. Types use plain names such as `string`, `integer`, `number`, `boolean`, `object`, and `array`.

**Answer row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as an `answer`. |
| `source` | object | Holds the public answer page and its source identity. |
| `source.id` | string | Gives the answer ID when Zhihu exposes one. |
| `source.url` | string URL | Gives the public answer URL. |
| `source.discoveryInput` | string | Gives the keyword, URL, handle, or ID that first found the answer. |
| `title` | string | Gives a public title when available. |
| `summary` | string | Gives the public excerpt when available. |
| `text` | string | Gives the available public answer body. |
| `author` | object | Holds public answer-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `publishedAt` | date-time string | Gives the UTC publication time when available. |
| `createdAt` | date-time string | Gives the UTC creation time when available. |
| `updatedAt` | date-time string | Gives the UTC update time when available. |
| `question` | object | Holds the public question linked to the answer. |
| `question.id` | string | Gives the linked question ID when available. |
| `question.title` | string | Gives the linked question title. |
| `question.url` | string URL | Gives the linked question URL. |
| `topics` | array of objects | Lists public topics linked to the answer. |
| `topics[].id` | string | Gives a topic ID when available. |
| `topics[].name` | string | Gives a topic name. |
| `topics[].url` | string URL | Gives a topic URL when available. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine answer row**

```json
{
  "recordType": "answer",
  "source": {
    "url": "https://www.zhihu.com/question/471506869/answer/1991187375",
    "id": "1991187375",
    "discoveryInput": "machine learning"
  },
  "text": "<p data-pid=\"JHahI6mi\"><b>一些区别：</b></p><ol><li data-pid=\"oxlDw4oG\">这两种方法都依赖于<b>数据</b>。然而，Statistical learning依赖于<b>基于规则</b>的编程，它以变量之间的关系形式正式化，而Machine learning从数据中学习，没有明确的编程指令（<b>非基于规则</b>）。</li><li data-pid=\"GAKzA_OL\">与机器学习相比，Statistical learning是基于具有少数属性的<b>较小</b>的数据集，而Machine learning可以从数十亿（<b>大规模</b>）的观察样本和属性中学习。</li><li data-pid=\"rI_cup-y\">Statistical learning是在<b>假设的基础上</b>进行的，如正态性、无多重共线性、同方差性等，而Machine learning则<b>不依赖于这些假设</b>，在大多数情况下会忽略它们。</li><li data-pid=\"kVfdTPgB\">Statistical learning主要是关于<b>推论</b>，大部分的想法是由样本、群体和假设产生的，相比之下，Machine learning强调<b>预测</b>、监督学习、无监督学习和半监督学习。</li><li data-pid=\"gtSNi-CC\">Statistical learning是<b>数学密集型</b>的，它是基于系数估计器的，需要对你的数据有很好的理解。另一方面，Machine learni</li></ol>",
  "author": {
    "name": "知乎用户",
    "id": "448b273d911b2d440cd603d834d3feeb",
    "url": "https://www.zhihu.com/api/v4/people/0"
  },
  "engagement": {
    "voteCount": 2,
    "commentCount": 2
  },
  "createdAt": "2021-07-11T02:59:44.000Z",
  "updatedAt": "2021-07-11T03:13:00.000Z",
  "question": {
    "id": "471506869",
    "title": "请问Statistical learning 和 machine learning 具体有什么区别？",
    "url": "https://www.zhihu.com/question/471506869"
  },
  "topics": [
    {
      "name": "机器学习",
      "id": "19559450",
      "url": "https://www.zhihu.com/api/v4/topics/19559450"
    },
    {
      "name": "无监督学习",
      "id": "19590194",
      "url": "https://www.zhihu.com/api/v4/topics/19590194"
    },
    {
      "name": "统计学习",
      "id": "19732702",
      "url": "https://www.zhihu.com/api/v4/topics/19732702"
    },
    {
      "name": "深度学习（Deep Learning）",
      "id": "19813032",
      "url": "https://www.zhihu.com/api/v4/topics/19813032"
    },
    {
      "name": "大规模机器学习",
      "id": "20047090",
      "url": "https://www.zhihu.com/api/v4/topics/20047090"
    }
  ],
  "sourceGaps": [
    "fullText"
  ],
  "summary": "一些区别：这两种方法都依赖于数据。然而，Statistical learning依赖于基于规则的编程，它以变量之间的关系形式正式化，而Machine learning从数据中学习，没有明确的编程指令（非基于规则）。与机器学习相比，Statistical learning是基于具有少数属性的较小的数据集，而Machine learning可以从数十亿（大规模）的观察样本和属性中学习。Statistical learning是在假设的基础上进行的，如正态性、无多重共线性、同方差性等，而Mach…"
}
```

**Question row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `question`. |
| `source` | object | Holds the public question page and its source identity. |
| `source.id` | string | Gives the question ID when available. |
| `source.url` | string URL | Gives the public question URL. |
| `source.discoveryInput` | string | Gives the keyword, URL, handle, or ID that first found the question. |
| `title` | string | Gives the public question title. |
| `summary` | string | Gives a public question excerpt when available. |
| `text` | string | Gives public question text when available. |
| `author` | object | Holds public question-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `publishedAt` | date-time string | Gives the UTC publication time when available. |
| `createdAt` | date-time string | Gives the UTC creation time when available. |
| `updatedAt` | date-time string | Gives the UTC update time when available. |
| `topics` | array of objects | Lists public topics linked to the question. |
| `topics[].id` | string | Gives a topic ID when available. |
| `topics[].name` | string | Gives a topic name. |
| `topics[].url` | string URL | Gives a topic URL when available. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine question row**

```json
{
  "recordType": "question",
  "source": {
    "url": "https://www.zhihu.com/question/27468261",
    "id": "27468261",
    "discoveryInput": "machine learning"
  },
  "title": "如何自学机器学习Machine Learning？",
  "author": {
    "name": "橙子",
    "id": "0e4a3c10d901995578f71f022799c1c7",
    "url": "https://www.zhihu.com/people/maverickz",
    "headline": "数学系+CS系学生。"
  },
  "engagement": {
    "voteCount": 6,
    "commentCount": 0
  },
  "createdAt": "2015-01-08T04:27:37.000Z",
  "updatedAt": "2015-01-08T11:56:46.000Z",
  "topics": [
    {
      "name": "计算机",
      "id": "19555547",
      "url": "https://www.zhihu.com/api/v4/topics/19555547"
    },
    {
      "name": "机器学习",
      "id": "19559450",
      "url": "https://www.zhihu.com/api/v4/topics/19559450"
    },
    {
      "name": "计算机科学",
      "id": "19580349",
      "url": "https://www.zhihu.com/api/v4/topics/19580349"
    }
  ]
}
```

**Hot question row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `hotQuestion`. |
| `source` | object | Holds the public hot-question page and its source identity. |
| `source.id` | string | Gives the question ID when available. |
| `source.url` | string URL | Gives the public question URL. |
| `source.discoveryInput` | string | Shows the input that first found the hot question. |
| `title` | string | Gives the hot-question title. |
| `summary` | string | Gives the public hot-question excerpt when available. |
| `text` | string | Gives public question text when available. |
| `author` | object | Holds public question-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `publishedAt` | date-time string | Gives the UTC publication time when available. |
| `createdAt` | date-time string | Gives the UTC creation time when available. |
| `updatedAt` | date-time string | Gives the UTC update time when available. |
| `topics` | array of objects | Lists public topics linked to the question. |
| `topics[].id` | string | Gives a topic ID when available. |
| `topics[].name` | string | Gives a topic name. |
| `topics[].url` | string URL | Gives a topic URL when available. |
| `hot` | object | Holds current hot-list context. |
| `hot.rank` | integer | Gives the hot-list position. |
| `hot.heatScore` | number | Gives the public heat score when available. |
| `hot.topAnswer` | object | Holds top-answer context when the hot-list source exposes it. |
| `hot.topAnswer.id` | string | Gives the top-answer ID when available. |
| `hot.topAnswer.url` | string URL | Gives the top-answer URL when available. |
| `hot.topAnswer.textExcerpt` | string | Gives the top-answer excerpt when available. |
| `hot.topAnswer.author` | object | Holds top-answer author details. |
| `hot.topAnswer.author.id` | string | Gives the top-answer author ID when available. |
| `hot.topAnswer.author.name` | string | Gives the top-answer author name. |
| `hot.topAnswer.author.url` | string URL | Gives the top-answer author URL when available. |
| `hot.topAnswer.voteCount` | integer | Gives the top-answer vote count when available. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine hot question row**

```json
{
  "recordType": "hotQuestion",
  "source": {
    "url": "https://www.zhihu.com/question/2075969425702741132",
    "id": "2075969425702741132",
    "discoveryInput": "hotQuestions"
  },
  "title": "西藏日喀则吉隆口岸发生泥石流，致 3 人遇难 558 人失联，有建筑被掩埋，目前情况如何？",
  "author": {
    "name": "知乎用户",
    "id": "d371683fd9673e521609ae7a4788e856",
    "url": "https://www.zhihu.com/api/v4/people/0"
  },
  "engagement": {
    "voteCount": 190,
    "commentCount": 163
  },
  "createdAt": "2026-08-26T07:34:40.000Z",
  "updatedAt": "2026-08-27T02:26:42.000Z",
  "topics": [
    {
      "name": "自然灾害",
      "id": "19643723",
      "url": "https://www.zhihu.com/api/v4/topics/19643723"
    },
    {
      "name": "泥石流",
      "id": "20459239",
      "url": "https://www.zhihu.com/api/v4/topics/20459239"
    },
    {
      "name": "日喀则",
      "id": "20709241",
      "url": "https://www.zhihu.com/api/v4/topics/20709241"
    },
    {
      "name": "灾情",
      "id": "23574351",
      "url": "https://www.zhihu.com/api/v4/topics/23574351"
    },
    {
      "name": "泥石流灾害",
      "id": "30355904",
      "url": "https://www.zhihu.com/api/v4/topics/30355904"
    }
  ],
  "summary": "最新消息 8月26日，西藏日喀则市吉隆县发生泥石流灾害。据初步统计，截至27日上午8时，成功搜救热索村民2人，排查发现遇难3人、失联558人。其中，外籍人员260人。 西藏吉隆泥石流灾害已造成3人遇难558人失联 成功搜救2人 2026年8月26日，西藏日喀则市吉隆县发生泥石流灾害。记者从前方指挥部获悉，截至8月26日20时，经初步核实统计，此次泥石流灾害已造成3人遇难，265人失联，具体伤亡人数还在进一步核查中，各项救援工作正有序开…",
  "hot": {
    "rank": 1,
    "heatScore": 1252
  }
}
```

**Article row**

Article detail runs and creator article listings use this same record shape.

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as an `article`. |
| `source` | object | Holds the public article page and its source identity. |
| `source.id` | string | Gives the article ID when available. |
| `source.url` | string URL | Gives the public article URL. |
| `source.discoveryInput` | string | Shows the URL, keyword, handle, or ID that first found the article. |
| `title` | string | Gives the public article title. |
| `summary` | string | Gives the public article excerpt when available. |
| `text` | string | Gives the available public article body. |
| `author` | object | Holds public article-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `publishedAt` | date-time string | Gives the UTC publication time. |
| `createdAt` | date-time string | Gives the UTC creation time when available. |
| `updatedAt` | date-time string | Gives the UTC update time when available. |
| `column` | object | Holds the public column linked to the article. |
| `column.id` | string | Gives the column ID when available. |
| `column.name` | string | Gives the column name when available. |
| `column.url` | string URL | Gives the column URL when available. |
| `topics` | array of objects | Lists public topics linked to the article. |
| `topics[].id` | string | Gives a topic ID when available. |
| `topics[].name` | string | Gives a topic name. |
| `topics[].url` | string URL | Gives a topic URL when available. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine article row**

```json
{
  "recordType": "article",
  "source": {
    "url": "https://zhuanlan.zhihu.com/p/682332617",
    "id": "682332617",
    "discoveryInput": "https://zhuanlan.zhihu.com/p/682332617"
  },
  "title": "【基础】大模型的背景知识：AI 宏观了解",
  "author": {
    "name": "张强",
    "id": "387cefbf2c35f338d84d71348436fee2",
    "url": "https://www.zhihu.com/people/studyisalifestyle",
    "headline": "坚持一些事，是因为不想让世界对我全面掌控……"
  },
  "engagement": {
    "voteCount": 35,
    "commentCount": 1
  },
  "publishedAt": "2024-02-15T06:46:33.000Z",
  "createdAt": "2024-02-15T06:46:33.000Z",
  "updatedAt": "2024-02-15T06:46:33.000Z",
  "topics": [
    {
      "name": "大模型",
      "id": "25402720",
      "url": "https://api.zhihu.com/topics/25402720"
    },
    {
      "name": "LLM",
      "id": "20660508",
      "url": "https://api.zhihu.com/topics/20660508"
    },
    {
      "name": "AI",
      "id": "19588023",
      "url": "https://api.zhihu.com/topics/19588023"
    }
  ],
  "column": {
    "id": "c_1741430207653949440",
    "name": "Hello，大模型",
    "url": "https://zhuanlan.zhihu.com/c_1741430207653949440"
  },
  "sourceGaps": [
    "fullText"
  ],
  "text": "<p data-pid=\"Aj57W3mu\">因工作原因，我从 2023 年中开始接触和学习大模型相关的知识。但由于过往的工作经历不在这个领域，在面对 AI、机器学习、深度神经网络、决策式 AI、生成式 AI、大模型、GPT 等一堆概念时，其实并不太清楚它们的逻辑关系，这可能不利于对大模型的进一步学习。我想有必要对 AI 技术有一个宏观上的了解，搞清楚大模型在 AI 技术栈中处于怎样的层次。这也是《Hello，大模型》的开篇文章，智识有限，不免会有些错误，希望不要给大家带来麻烦。</p><h2>1. 早期发展：符号人工智能（Symbolic AI）</h2><p data-pid=\"Hdhi_7Np\">人工智能（AI，Artificial Intelligence）作为计算机科学的一个分支，大概出现在 20 世纪 50 年代，核心目的是让计算机能够像人类一样思考、学习、推理、决策、交流，更好地解决复杂的问题，变得更加有用。</p><p data-pid=\"CvCbI9yd\">从 AI 的出现的 50 年代到 80 年代中前期，是 AI 发展的早期阶段，称为“符号人工智能（Symbolic AI）”。<b>“符号”可以简单的理解为语句和规则，</b>计算机的智能性主要依赖于：<b>领域专家和程序员将现实生活中的知识转换为规则并编程实现（一条简单的规则可能就是“if...els</b></p>",
  "summary": "<img src=\"https://pic4.zhimg.com/v2-e6ac24f0247c22fe48774666b5a980cd_200x112.png\" data-caption=\"样本、特征、数据集\" data-size=\"normal\" data-rawwidth=\"636\" data-rawheight=\"294\" data-watermark=\"watermark\" data-original-src=\"v2-e6ac24f0247c22fe48774666b5a980cd\" data-watermark-src=\"v2-f0b9322a4be16fcf6864840f5173ae32\" data-private-watermark-src=\"\" data-original=\"https://pic4.zhimg.com/v2-e6ac24f0247c22fe48774666b5a980cd_r.png\" class=\"origin_image inline-img zh-lightbox-thumb\"/>因工作原因，我从 2023 年中开始接触和学习大模型相关的知识。但由于过往的工作经历不在这个领域，在面对 AI、机器学习、深度神经网络、决策式 AI、生成式 AI、大模型、GPT 等一堆概念时，其实并不太清楚它们的逻辑关系，这可能不利于对大模型的进一步学习…"
}
```

**Column row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `column`. |
| `source` | object | Holds the public column article page and its source identity. |
| `source.id` | string | Gives the article ID when available. |
| `source.url` | string URL | Gives the public article URL in the column. |
| `source.discoveryInput` | string | Shows the keyword, URL, handle, or ID that first found the listing. |
| `title` | string | Gives the listed article title. |
| `summary` | string | Gives the listed article excerpt when available. |
| `text` | string | Gives available public article text when the listing provides it. |
| `author` | object | Holds public article-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `publishedAt` | date-time string | Gives the UTC publication time when available. |
| `createdAt` | date-time string | Gives the UTC creation time when available. |
| `updatedAt` | date-time string | Gives the UTC update time when available. |
| `column` | object | Holds the public source column. |
| `column.id` | string | Gives the column ID when available. |
| `column.name` | string | Gives the column name when available. |
| `column.url` | string URL | Gives the column URL when available. |
| `topics` | array of objects | Lists public topics linked to the article listing. |
| `topics[].id` | string | Gives a topic ID when available. |
| `topics[].name` | string | Gives a topic name when available. |
| `topics[].url` | string URL | Gives a topic URL when available. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine column row**

This row is shortened. The `text` and `summary` values use the JSON string `"..."` to mark omitted public content.

```json
{
  "recordType": "column",
  "source": {
    "url": "https://zhuanlan.zhihu.com/p/1962852227333990287",
    "id": "1962852227333990287",
    "discoveryInput": "machine learning"
  },
  "title": "SOSP 2025 论文评述 Day 3 Session 13: OS Memory Management and Scalability",
  "column": {
    "id": "c_1961542888350549465",
    "url": "https://zhuanlan.zhihu.com/column/c_1961542888350549465"
  },
  "author": {
    "name": "IPADS-SYS",
    "id": "83b852754105538c6f7d4add05d8b39d",
    "url": "https://www.zhihu.com/people/ipadssys",
    "headline": "上海交通大学并行与分布式系统研究所官方知乎账号"
  },
  "engagement": {
    "voteCount": 21,
    "commentCount": 0
  },
  "createdAt": "2025-10-18T10:20:48.000Z",
  "updatedAt": "2025-10-18T10:20:48.000Z",
  "summary": "...",
  "text": "..."
}
```

**Video row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `video`. |
| `source` | object | Holds the public video page and its source identity. |
| `source.id` | string | Gives the video ID when available. |
| `source.url` | string URL | Gives the public Zhihu video URL. |
| `source.discoveryInput` | string | Shows the URL, keyword, handle, or ID that first found the video. |
| `title` | string | Gives the public video title. |
| `summary` | string | Gives the public video description or excerpt when available. |
| `text` | string | Gives public video text when available. |
| `author` | object | Holds public video-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `publishedAt` | date-time string | Gives the UTC publication time when available. |
| `createdAt` | date-time string | Gives the UTC creation time when available. |
| `updatedAt` | date-time string | Gives the UTC update time when available. |
| `topics` | array of objects | Lists public topics linked to the video. |
| `topics[].id` | string | Gives a topic ID when available. |
| `topics[].name` | string | Gives a topic name. |
| `topics[].url` | string URL | Gives a topic URL when available. |
| `media` | object | Holds public video metadata. |
| `media.videoUrl` | string URL | Gives a usable public video URL when available. |
| `media.coverImageUrl` | string URL | Gives the public cover image URL when available. |
| `media.durationSeconds` | number | Gives the video duration in seconds. |
| `media.width` | integer | Gives the video width in pixels. |
| `media.height` | integer | Gives the video height in pixels. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine video row**

```json
{
  "recordType": "video",
  "source": {
    "url": "https://www.zhihu.com/zvideo/1689579617038585857",
    "id": "1689579617038585857",
    "discoveryInput": "https://www.zhihu.com/zvideo/1689579617038585857"
  },
  "title": "CMF课程 | 有没有更加科学有效的学习过程与方法？",
  "author": {
    "name": "涟一CMF创新研究",
    "id": "f28156af42ade98d4c366c81cd8bf64f",
    "url": "https://www.zhihu.com/people/cmf-59-52",
    "headline": "为家居家电｜3C数码｜汽车｜美妆企业提供CMF顾问咨询服务"
  },
  "engagement": {
    "voteCount": 2,
    "commentCount": 5,
    "shareCount": 0,
    "viewCount": 186
  },
  "publishedAt": "2023-09-25T02:30:06.000Z",
  "updatedAt": "2023-09-25T02:34:23.000Z",
  "topics": [
    {
      "name": "CMF",
      "id": "19573320",
      "url": "https://www.zhihu.com/api/v4/topics/19573320"
    },
    {
      "name": "CMF课程",
      "id": "28161640",
      "url": "https://www.zhihu.com/api/v4/topics/28161640"
    },
    {
      "name": "CMF学习",
      "id": "28362175",
      "url": "https://www.zhihu.com/api/v4/topics/28362175"
    }
  ],
  "media": {
    "videoUrl": "https://vdn3.vzuu.com/FHD/e3b432ac-569c-11ee-b122-96e157934a00-v8_f2_t1_7XXnYk3s.mp4?auth_key=1787820377-0-0-0c3252e73978e08e7bf84adbbf8549f2&bu=1513c7c2&c=avc.8.0&disable_local_cache=1&expiration=1787820377&f=mp4&pu=1513c7c2&v=tx",
    "coverImageUrl": "https://pic1.zhimg.com/v2-d644514e3fb6b44a88c01d41d3bb5882_r.jpg?source=12a79843",
    "durationSeconds": 413.709,
    "width": 1920,
    "height": 1080
  },
  "summary": "涟一CMF课程分享：大家都知道这个行业是存在前景有一定发展的。但是如何去让自己做的收益更大？\n\n首先呢我们认为一个学习的金字塔，CMF的学习金字塔它分成三个阶段:第一个阶段是认知理解；第二个阶段是方法实践；第三个阶段是策略规划。\n\n什么意思呢？我们来看一下~\n\n想了解更多家居、家电、3C、汽车的CMF资讯、CMF课程、CMF报告、CMF设计咨询服务等内容，欢迎关注涟一CMF创新研究~"
}
```

**Comment row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `comment`. |
| `source` | object | Holds the public comment page and its source identity. |
| `source.id` | string | Gives the comment ID when available. |
| `source.url` | string URL | Gives the public comment URL. |
| `source.discoveryInput` | string | Shows the content URL that first found the comment. |
| `text` | string | Gives the public comment text. |
| `author` | object | Holds public comment-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public comment engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `createdAt` | date-time string | Gives the UTC comment creation time. |
| `content` | object | Holds the public content linked to the comment. |
| `content.recordType` | string | Identifies the linked content as a `question`, `answer`, `article`, or `video`. |
| `content.id` | string | Gives the linked content ID when available. |
| `content.title` | string | Gives the linked content title when available. |
| `content.url` | string URL | Gives the linked content URL. |

**Genuine comment row**

```json
{
  "recordType": "comment",
  "source": {
    "url": "https://www.zhihu.com/api/v4/comment_v5/comments/4430293870",
    "id": "4430293870",
    "discoveryInput": "https://www.zhihu.com/question/471506869/answer/1991187375"
  },
  "text": "哈？[思考]",
  "author": {
    "name": "思悥",
    "id": "e2f3c8a858a97f324a950ec2e25a8e0a",
    "url": "https://www.zhihu.com/people/tian-cai-68-16",
    "headline": "小作坊磕盐民工 g-u-n.github.io"
  },
  "engagement": {
    "likeCount": 0,
    "replyCount": 1
  },
  "createdAt": "2021-07-11T03:08:52.000Z",
  "content": {
    "recordType": "answer",
    "id": "1991187375",
    "url": "https://www.zhihu.com/question/471506869/answer/1991187375"
  }
}
```

**Comment reply row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `commentReply`. |
| `source` | object | Holds the public reply page and its source identity. |
| `source.id` | string | Gives the reply ID when available. |
| `source.url` | string URL | Gives the public reply URL. |
| `source.discoveryInput` | string | Shows the comment URL that first found the reply. |
| `text` | string | Gives the public reply text. |
| `author` | object | Holds public reply-author details. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public author name. |
| `author.url` | string URL | Gives the public author profile URL. |
| `author.headline` | string | Gives the public author headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the author as verified. |
| `engagement` | object | Holds public reply engagement counts. |
| `engagement.voteCount` | integer | Gives the public vote count when available. |
| `engagement.likeCount` | integer | Gives the public like count when available. |
| `engagement.commentCount` | integer | Gives the public comment count when available. |
| `engagement.replyCount` | integer | Gives the public reply count when available. |
| `engagement.viewCount` | integer | Gives the public view count when available. |
| `engagement.favoriteCount` | integer | Gives the public favorite count when available. |
| `engagement.shareCount` | integer | Gives the public share count when available. |
| `createdAt` | date-time string | Gives the UTC reply creation time. |
| `content` | object | Holds the public content linked to the reply. |
| `content.recordType` | string | Identifies the linked content as a `question`, `answer`, `article`, or `video`. |
| `content.id` | string | Gives the linked content ID when available. |
| `content.title` | string | Gives the linked content title when available. |
| `content.url` | string URL | Gives the linked content URL. |
| `parentComment` | object | Holds the parent comment relationship. |
| `parentComment.id` | string | Gives the parent comment ID when available. |
| `parentComment.url` | string URL | Gives the parent comment URL when available. |
| `parentComment.text` | string | Gives the parent comment text when available. |

**Genuine comment reply row**

```json
{
  "recordType": "commentReply",
  "source": {
    "url": "https://www.zhihu.com/api/v4/comment_v5/comments/4429085608",
    "id": "4429085608",
    "discoveryInput": "https://www.zhihu.com/question/471506869/answer/1991187375/comment/4430293870"
  },
  "text": "[微笑]",
  "author": {
    "name": "麦契格斯",
    "id": "448b273d911b2d440cd603d834d3feeb",
    "url": "https://www.zhihu.com/people/matrix-58-77",
    "headline": "深度学习机器学习"
  },
  "engagement": {
    "likeCount": 0,
    "replyCount": 0
  },
  "createdAt": "2021-07-11T03:14:25.000Z",
  "content": {
    "recordType": "answer",
    "id": "1991187375",
    "url": "https://www.zhihu.com/question/471506869/answer/1991187375"
  },
  "parentComment": {
    "id": "4430293870",
    "url": "https://www.zhihu.com/question/471506869/answer/1991187375/comment/4430293870"
  }
}
```

**Person row**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a `person`. |
| `source` | object | Holds the public profile page and its source identity. |
| `source.id` | string | Gives the profile ID when available. |
| `source.url` | string URL | Gives the public profile URL. |
| `source.discoveryInput` | string | Shows the keyword, profile URL, handle, or ID that first found the profile. |
| `title` | string | Gives a public profile title when available. |
| `author` | object | Holds the public person identity used for the row. |
| `author.id` | string | Gives the author ID when available. |
| `author.name` | string | Gives the public display name. |
| `author.url` | string URL | Gives the public profile URL. |
| `author.headline` | string | Gives the public headline when available. |
| `author.isVerified` | boolean | Says whether Zhihu marks the person as verified. |
| `profile` | object | Holds public profile details and counts. |
| `profile.name` | string | Gives the public profile name. |
| `profile.username` | string | Gives the public username or handle when available. |
| `profile.bio` | string | Gives the public biography when available. |
| `profile.headline` | string | Gives the public profile headline when available. |
| `profile.avatarUrl` | string URL | Gives the public avatar URL when available. |
| `profile.isVerified` | boolean | Says whether Zhihu marks the person as verified. |
| `profile.verificationReason` | string | Gives the public verification reason when available. |
| `profile.followerCount` | integer | Gives the public follower count when available. |
| `profile.followingCount` | integer | Gives the public following count when available. |
| `profile.answerCount` | integer | Gives the public answer count when available. |
| `profile.articleCount` | integer | Gives the public article count when available. |
| `profile.questionCount` | integer | Gives the public question count when available. |
| `profile.videoCount` | integer | Gives the public video count when available. |
| `profile.lastActiveAt` | date-time string | Gives the latest public activity time when available. |
| `profile.location` | string | Gives the public location when available. |
| `sourceGaps` | array of strings | Lists public data areas not exposed for the row. |

**Genuine person row**

```json
{
  "recordType": "person",
  "source": {
    "url": "https://www.zhihu.com/people/24-61-30-40-18",
    "id": "d1d02394ff8ab4ce3dbc59755733a24a",
    "discoveryInput": "https://www.zhihu.com/people/24-61-30-40-18"
  },
  "author": {
    "name": "不吃香菜",
    "url": "https://www.zhihu.com/people/24-61-30-40-18"
  },
  "profile": {
    "name": "不吃香菜",
    "username": "24-61-30-40-18",
    "avatarUrl": "https://pica.zhimg.com/v2-abed1a8c04700ba7d72b45195223e0ff_xl.jpg?source=32738c0c&needBackground=1"
  },
  "sourceGaps": [
    "verification",
    "location"
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The primary event is **Content match**. Each line below describes one public row type that can be emitted. The Store shows the current price for your account tier.

| Buyer-facing event | Charge description |
| --- | --- |
| Content match | One public answer, question, article, video, or column returned by a keyword search or selected content type. |
| Hot question | One public hot-list question, with rank, heat, and top-answer details when shown. |
| Answer | One public answer returned for a supplied question, with available text and question context. |
| Article detail | One public article returned from a supplied article URL, with available text, author, topics, and dates. |
| Column article | One public article listing returned from a supplied public column URL. |
| Video | One public video returned from a supplied URL or selected content-type search. |
| Comment | One top-level public comment returned for a supplied content URL. |
| Comment reply | One public reply returned for a supplied comment, with its parent link when available. |
| Creator profile | One public creator profile returned from discovery or a supplied profile URL. |
| Creator article | One public article listing returned from a supplied creator profile URL. |

#### 🔌 Integrations

Open the saved rows from the `results` link or read the default dataset through the Apify API. The Actor's public data is ready for review and export in the dataset.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### How does the Actor handle the same source found more than once?

It saves the first eligible occurrence immediately. If another keyword, URL, handle, or ID finds the same source item later, that later match is ignored and the saved row is not rewritten.

##### Can I run more than one keyword in one job?

No. Enter one keyword or phrase for `keywordSearch`. Start another run for a different search.

##### What happens when Zhihu does not expose a field?

The missing field is omitted from that row. `sourceGaps` can list `fullText`, `author`, `engagement`, `publicationTime`, `topics`, `relatedContent`, `media`, `profileDetails`, `location`, or `verification`.

##### Can I collect full answers and articles?

The Actor returns the available public body for answer and article retrieval. A source gap is recorded when Zhihu does not expose the full text.

##### Can I collect comments and comment replies separately?

Yes. Use `contentUrls` for top-level comments and `commentUrls` for replies. Reply rows keep the parent comment link when it is available.

##### What does an empty `maxItems` value do?

Leaving it empty returns all available results until the source is exhausted. Set a positive integer when you want a smaller set to review.

##### Does the Actor collect private or login-only pages?

No. It is for public Zhihu pages. Private, deleted, login-only, paywalled, and otherwise restricted content is outside the supported scope.

##### Which target should I choose for a creator?

Choose `creatorProfile` for the public profile itself. Choose `creatorArticles` for the creator's available article listings. Use `contentTypes: ["people"]` when finding people through keyword search.

##### Can I read the dataset with code?

Yes. Open `results` for the default dataset view or use the Apify API to read the saved rows.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~zhihu/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[Quora Search Scraper](https://apify.com/maximedupre/quora-search-scraper)**: Compare public Q\&A pages with visible answers, topics, profiles, and counts.
- **[Reddit Comments Search Scraper](https://apify.com/maximedupre/reddit-comments-search-scraper)**: Search public Reddit comments for another source of product and brand discussions.
- **[Zhihu Scraper — Q\&A, Answers, Articles, Columns](https://apify.com/sian.agency/zhihu-scraper)**: Use it for long-form Zhihu Q\&A and article collection.
- **[❓ Zhihu Search Scraper](https://apify.com/ethereal_wool/zhihu-search-scraper)**: Use it for public Zhihu search records from keywords, URLs, or IDs.
- **[Zhihu Article Scraper](https://apify.com/automation-lab/zhihu-article-scraper)**: Use it for public Zhihu Zhuanlan article text and metadata.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose the Zhihu data you want to collect.

## `keyword` (type: `string`):

Search public Zhihu with one keyword or phrase. Run another job for a different search.

## `contentTypes` (type: `array`):

Limit the search to these Zhihu types. Leave this empty to search all supported types.

## `topicCategories` (type: `array`):

Filter keyword results to these topic categories. Leave this empty to use all categories.

## `hotOnly` (type: `boolean`):

Return only keyword results that belong to the current Zhihu hot list.

## `minimumTopAnswerVotes` (type: `integer`):

For keyword search, return only results whose top answer has at least this many votes. Leave this empty to skip the filter.

## `publishedFrom` (type: `string`):

For keyword search, return items published on or after this UTC date. Use YYYY-MM-DD. Leave this empty for no start date.

## `publishedTo` (type: `string`):

For keyword search, return items published on or before this UTC date. Use YYYY-MM-DD. Leave this empty for no end date.

## `sortBy` (type: `string`):

Choose how keyword results are ordered. If you leave this empty, Zhihu uses its normal search order.

## `questionUrls` (type: `array`):

Add one or more public Zhihu question URLs. The Actor returns answer records for these questions.

## `articleUrls` (type: `array`):

Add one or more public Zhihu article URLs. The Actor returns the available article body and details.

## `columnUrls` (type: `array`):

Add one or more public Zhihu column URLs. The Actor returns available article listings for these columns.

## `videoUrls` (type: `array`):

Add one or more public Zhihu video URLs. The Actor returns available video records and metadata.

## `contentUrls` (type: `array`):

Add one or more public Zhihu content URLs. The Actor returns their top-level comments.

## `commentSort` (type: `string`):

Choose how top-level comments are ordered. If you leave this empty, Zhihu uses its normal comment order.

## `commentUrls` (type: `array`):

Add one or more public Zhihu comment URLs. The Actor returns their replies and keeps the parent comment link.

## `creatorUrls` (type: `array`):

Add one or more public Zhihu creator profile URLs. This field is used by Creator profile and Creator articles targets.

## `maxItems` (type: `integer`):

Stop after this many records for the selected target. Leave this empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "keywordSearch",
  "keyword": "machine learning",
  "contentTypes": [
    "answers"
  ],
  "sortBy": "relevance",
  "maxItems": 23
}
```

# Actor output Schema

## `results` (type: `string`):

Open the default dataset to view successful public Zhihu records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "target": "keywordSearch",
    "keyword": "machine learning",
    "contentTypes": [
        "answers"
    ],
    "sortBy": "relevance",
    "maxItems": 23
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/zhihu").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "target": "keywordSearch",
    "keyword": "machine learning",
    "contentTypes": ["answers"],
    "sortBy": "relevance",
    "maxItems": 23,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/zhihu").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "target": "keywordSearch",
  "keyword": "machine learning",
  "contentTypes": [
    "answers"
  ],
  "sortBy": "relevance",
  "maxItems": 23
}' |
apify call maximedupre/zhihu --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/zhihu"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MlSU1dBzydBSaZJz1/builds/Rh0vhKE9zqQiojsfz/openapi.json
