# 知乎热榜 & 知乎 API | Zhihu Scraper & MCP Server (`molded_mountainpass/zhihu-hot-list-scraper`) Actor

Zhihu (知乎) scraper & API, no login: 知乎热榜 hot list with rank tracking and Slack/Telegram/Discord alerts, plus search, answers, comments, creators, topics and columns. MCP server for AI agents.

- **URL**: https://apify.com/molded_mountainpass/zhihu-hot-list-scraper.md
- **Developed by:** [Divya Raj](https://apify.com/molded_mountainpass) (community)
- **Categories:** Social media, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 知乎热榜 & 知乎 API | Zhihu Scraper (知乎爬虫) & MCP Server

**Zhihu Scraper** is a ready-made **Zhihu API** for [Zhihu (知乎)](https://www.zhihu.com), China's largest Q\&A platform. Get the live **Zhihu hot list (知乎热榜 / 知乎热搜 / zhihu rebang)** and run **search, answers, articles, comments, creator profiles, topics and Zhuanlan columns (知乎专栏)**, all **with no login, cookie or API key**. Export to JSON, CSV or Excel, get Slack, Telegram or Discord alerts when a topic trends, or connect AI agents through the built-in **Zhihu MCP server**.

### What can this Zhihu scraper do?

- 🔥 **Zhihu hot list (知乎热榜):** all 9 boards with rank, heat score (热度), excerpt, answer and follower counts
- 📈 **Hot list tracking:** each run compares with the previous one, giving `rank_change`, `heat_change` and new / up / down / dropped status
- 🔔 **Trend alerts:** get pinged in **Slack, Telegram or Discord** when your keyword hits the hot list
- 🔎 **Zhihu search:** answers, articles and videos with type, sort and date filters, plus search suggestions, topic search and column search
- 💬 **Answers and comments:** every answer to a question (full text, optional Markdown), comments and replies
- 👤 **Creators:** profiles (followers, upvotes, verification, employer, IP location), their answers and articles
- 📚 **Zhuanlan (知乎专栏):** column search and every article in a column
- 🤖 **Zhihu MCP server:** Claude, Cursor and other MCP clients can query Zhihu live
- 🚫 **No login needed:** nothing to set up; optionally use your own Zhihu account or official API key for unlimited runs

### 中文说明

**知乎爬虫 / 知乎 API**：**知乎热榜**（全站、科学、数码、体育、时尚、影视、校园、汽车、深度 9 个榜单）、**知乎搜索**、问题回答、文章详情、**知乎评论**及回复、用户资料、话题和**知乎专栏**文章，无需登录、无需 Cookie 即可采集。也可以填写你自己的知乎开放平台 Access Secret 或 Cookie，不受每日额度限制。

- **热榜监控**：记录排名与热度变化（上升、下降、新上榜、掉榜），支持关键词提醒，推送到 Slack、Telegram 或 Discord。
- **数据导出**：JSON、CSV、Excel，或通过 Apify API 和 Webhook 接入你的系统。
- **AI 接入**：内置 MCP Server，可在 Claude、Cursor 等 AI 工具中直接查询知乎。
- **知乎开放平台**：Access Secret 每天 1000 次免费调用，用于搜索和问题回答；Cookie 可解锁全部功能。
- **按结果计费**：每条 $0.002，失败不收费。

### Use cases

- **China social media monitoring:** track Chinese public opinion and trending topics hour by hour
- **Brand and competitor tracking:** alerts when your brand trends, plus search and comment exports for sentiment analysis
- **Zhihu datasets for AI:** full answer text and comments in Chinese for NLP, LLM training and RAG
- **KOL and creator research:** find experts by topic, compare followers and upvotes
- **Zhihu in English:** export Chinese answers to CSV or JSON for your own translation or analysis pipeline

### How to scrape Zhihu

1. Click **Try for free** and pick an **operation** (the Zhihu hot list is the default).
2. Add keywords (for search) or Zhihu URLs (for answers, comments, profiles and columns).
3. Click **Start**, then download the data as JSON, CSV or Excel, or fetch it through the Apify API.
4. Optional: **schedule** the run hourly and add a Slack, Telegram or Discord target for a Zhihu trend alert bot.

### Operations

| `operation` | Input | Output |
|---|---|---|
| `hot_list` (default) | `categories` | One row per trending question (知乎热榜) |
| `search` | `keywords` | Answers, articles, videos and questions (知乎搜索) |
| `search_suggestions` | `keywords` | Zhihu's autocomplete suggestions |
| `topic_search` | `keywords` | Topics (话题): name, followers, questions |
| `column_search` | `keywords` | Zhuanlan columns (专栏): title, articles, followers, author |
| `web_search` | `keywords` | Zhihu's web-wide search (needs your official API key) |
| `question_answers` | question `urls` | Every answer, with text |
| `content_detail` | answer / article / question `urls` | One detailed row per URL |
| `comments` | answer `urls` | Comments (知乎评论), plus replies with `includeReplies` |
| `comment_replies` | answer `urls` + `commentIds` | Replies to specific comments |
| `user_profile` | `zhihu.com/people/…` `urls` | Followers, answers, articles, upvotes, verification, employer, IP location |
| `user_articles` / `user_answers` | `zhihu.com/people/…` `urls` | A creator's articles or answers, newest first |
| `column_articles` | `zhuanlan.zhihu.com/<column>` `urls` | Every article in a column |

Paging is automatic up to `maxItems` per keyword or URL. On the hosted backend, `content_detail` for an answer has no vote or comment counts (the source doesn't provide them); search, `question_answers` and creator posts do include them, and so does `content_detail` with your cookie.

#### Input example

```json
{
  "operation": "hot_list",
  "categories": ["total", "digital"],
  "titleKeywords": ["AI", "华为"],
  "slackWebhookUrl": "https://hooks.slack.com/services/…"
}
```

#### Output example (hot list)

```json
{
  "category": "total",
  "rank": 3,
  "title": "如何评价……？",
  "question_url": "https://www.zhihu.com/question/…",
  "heat": 26340000,
  "heat_text": "2634 万热度",
  "answer_count": 812,
  "follower_count": 3021,
  "prev_rank": 7,
  "rank_change": 4,
  "list_status": "up",
  "scraped_at": "2026-10-26T03:00:00+00:00"
}
```

### Zhihu hot list monitoring

| Field | Default | Notes |
|---|---|---|
| `categories` | `["total"]` | total, science, digital, sport, fashion, film, school, car, depth |
| `maxItemsPerCategory` | 50 | 1–50 |
| `trackChanges` | true | Adds `prev_rank`, `rank_change` (positive = climbed), `heat_change`, `list_status` |
| `includeDropped` | false | Also output questions that left the board (`list_status: dropped`) |
| `titleKeywords` | – | Only output questions whose title or excerpt mentions one of these words |
| `onlyNew` | false | Skip questions returned in earlier runs |
| `stateKey` | `default` | Separate memory per monitor |

#### Output fields

- **Hot list:** `category, rank, question_id, title, question_url, excerpt, heat, heat_text, answer_count, follower_count, comment_count, label, is_debut, trend, topic_ids, thumbnail_url, created_at, scraped_at, is_new, prev_rank, rank_change, heat_change, list_status, matched_keywords`
- **Search, answers, articles:** `operation, record_type, keyword, search_rank, content_type, content_id, title, url, question_id, question_url, excerpt, content, content_markdown, voteup_count, comment_count, answer_count, follower_count, visit_count, play_count, topics, image_url, created_at, updated_at, ip_location, author_*`
- **Comments:** `record_type (comment | reply), comment_id, parent_comment_id, content_url, content, like_count, reply_count, reply_to_author, is_author, ip_location, created_at, author_*`
- **Topics and columns:** `topic_id, name, url, introduction, follower_count, question_count` / `column_id, title, url, description, article_count, follower_count, author_*`

Every row also has `backend`, which says how it was fetched.

### Zhihu MCP server for AI agents

This actor also runs as a remote **Zhihu MCP server** (streamable HTTP):

```
URL:    https://molded_mountainpass--zhihu-hot-list-scraper.apify.actor/mcp
Header: Authorization: Bearer <your Apify API token>
```

Tools: `zhihu_hot_list`, `zhihu_search`, `zhihu_search_topics`, `zhihu_search_columns`, `zhihu_question_answers`, `zhihu_content`, `zhihu_comments`, `zhihu_user`, `zhihu_user_posts`, `zhihu_column_articles`. Each returned row is billed like a dataset row.

### No login, or your own account

Everything works with no login: the hot list comes straight from Zhihu, and the other operations run on our hosted backend. Hosted capacity is shared and limited per day; when it's used up, runs ask you to try again after 00:00 UTC. Free Apify plans include **5 hosted requests** to try it (each request returns up to about 20 results); paid plans aren't trial-limited.

For unlimited runs, add your own account instead (it's used first when present):

- **Official Zhihu API key (知乎开放平台):** every account gets **1,000 free calls a day**. Sign up at [developer.zhihu.com](https://developer.zhihu.com), copy the **Access Secret** from 个人中心 (personal center), and paste it into **Zhihu API key**. It's used for `search` (up to 10 results per keyword), `question_answers` (summaries) and `web_search` (up to 20). No account-ban risk.
- **Zhihu cookie:** log in to zhihu.com, open DevTools → Network, click any `zhihu.com` request and copy the full `cookie` request header into **Zhihu cookie** (must contain `z_c0`). It unlocks every operation on your account, including comments on articles and questions. Keep volumes reasonable; Zhihu may rate-limit heavy use. If a run reports `ERR_TICKET_NOT_EXIST`, copy a fresh cookie.

Both fields are stored encrypted and only used for your runs. If you add both, the API key is used where it applies and the cookie for the rest. Comments on articles and questions (not just answers) need the cookie.

### Notifications

| Field | Notes |
|---|---|
| `slackWebhookUrl` | Slack incoming webhook |
| `discordWebhookUrl` | Discord channel webhook |
| `telegramBotToken` + `telegramChatId` | Bot from @BotFather (add it to the chat first) |
| `notificationLimit` | Items per message (default 10) |
| `webhookUrl` | All results POSTed as JSON (Make, Zapier, n8n) |

### Pricing

**$0.002 per result** (pay per event): $2 per 1,000 rows. Failed lookups produce no rows and cost nothing beyond the small platform start fee.

### FAQ

**Is there an official Zhihu API?** Since 2026 Zhihu has an open platform (知乎开放平台) with a free tier covering search, the hot list and answer summaries. This actor covers much more (comments, creators, columns, full answers) with no account needed, and can also use your official key.

**How often does the Zhihu hot list (知乎热榜) update?** Every few minutes. Schedule this actor hourly with `trackChanges` to see which questions are climbing, or with `onlyNew` to capture each new trending question once.

**Can I scrape Zhihu answers and comments without logging in?** Yes. Use `question_answers`, `content_detail` or `comments`. Answer text comes as plain text, and as Markdown with `includeMarkdown`.

**Can I read Zhihu in English?** Zhihu content is in Chinese. Export it as CSV or JSON and run it through your translation tool or LLM of choice.

**Can I use Zhihu data in Claude, Cursor or another AI agent?** Yes. Add the MCP server URL above to your MCP client config.

**Is scraping Zhihu legal?** This actor collects publicly available data. You're responsible for using it in line with Zhihu's terms and applicable laws, such as China's PIPL and the GDPR for personal data.

### For developers

```
pip install -r requirements.txt
python -m src                                  # run locally
pip install pytest && python -m pytest tests   # tests
apify push                                     # deploy
```

# Actor input Schema

## `operation` (type: `string`):

What to scrape. No login needed: the hot list is public and the other operations run on our hosted backend (shared daily capacity). Add your own Zhihu API key or cookie below for unlimited runs.

## `categories` (type: `array`):

Hot list boards to scrape. total = main 热榜.

## `maxItemsPerCategory` (type: `integer`):

Each board returns up to 50 items.

## `titleKeywords` (type: `array`):

Only return hot-list questions whose title or excerpt contains one of these words (case-insensitive). Combine with Slack/Telegram/Discord to get alerted when your topic trends.

## `trackChanges` (type: `boolean`):

Compare with the previous run (same state key) and add prev_rank, rank_change, heat_change and list_status (new / up / down / same).

## `includeDropped` (type: `boolean`):

Also output questions that left the board since the previous run (list_status = dropped).

## `onlyNew` (type: `boolean`):

Incremental mode: skip questions already returned in earlier runs.

## `stateKey` (type: `string`):

Name for the memory used by 'Only new' and 'Track rank changes'. Use different keys for separate monitors.

## `zhihuApiKey` (type: `string`):

Free from developer.zhihu.com → 个人中心 (personal center) → Access Secret. Used in preference to the cookie for search, web_search and question_answers, and as a fallback for the main hot list.

## `zhihuCookie` (type: `string`):

Copy from your browser while logged in to zhihu.com: DevTools → Network → any zhihu.com request → Request Headers → cookie. Must include z_c0 and d_c0. Requests run as your account, so keep volumes reasonable.

## `keywords` (type: `array`):

For search, topic_search, column_search, web_search and search_suggestions. One run can search several keywords.

## `urls` (type: `array`):

For the other operations. Questions: zhihu.com/question/…, answers: …/answer/…, articles: zhuanlan.zhihu.com/p/…, columns: zhuanlan.zhihu.com/<column>, videos: zhihu.com/zvideo/…, creators: zhihu.com/people/….

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

Pages are fetched automatically until this limit or the end.

## `searchContentType` (type: `string`):

For search: restrict results to one content type.

## `searchSort` (type: `string`):

For search: result order.

## `searchTimeRange` (type: `string`):

For search: only content published within this period.

## `answerSort` (type: `string`):

For question_answers: answer order.

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

For comments: comment order.

## `includeReplies` (type: `boolean`):

Also fetch replies under each comment (linked via parent_comment_id).

## `maxRepliesPerComment` (type: `integer`):

With "include replies": max replies fetched under each comment.

## `commentIds` (type: `array`):

comment_id values from a comments run, used with the same content URL.

## `includeMarkdown` (type: `boolean`):

Add content_markdown (full body as Markdown) next to the plain-text content.

## `slackWebhookUrl` (type: `string`):

Slack incoming webhook URL. Each run posts a summary message.

## `discordWebhookUrl` (type: `string`):

Discord channel webhook URL. Each run posts a summary message.

## `telegramBotToken` (type: `string`):

From @BotFather. Add the bot to your chat first.

## `telegramChatId` (type: `string`):

Chat or channel ID to post to (e.g. -1001234567890 or @yourchannel).

## `notificationLimit` (type: `integer`):

How many items each Slack/Telegram/Discord message lists.

## `webhookUrl` (type: `string`):

All results of the run are POSTed here as JSON (Make, Zapier, n8n, your API).

## `proxyConfiguration` (type: `object`):

Optional proxy.

## Actor input object example

```json
{
  "operation": "hot_list",
  "categories": [
    "total"
  ],
  "maxItemsPerCategory": 50,
  "trackChanges": true,
  "includeDropped": false,
  "onlyNew": false,
  "stateKey": "default",
  "keywords": [
    "露营"
  ],
  "maxItems": 100,
  "searchContentType": "all",
  "searchSort": "relevance",
  "searchTimeRange": "all",
  "answerSort": "default",
  "commentSort": "top",
  "includeReplies": false,
  "maxRepliesPerComment": 20,
  "includeMarkdown": false,
  "notificationLimit": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

## `hotList` (type: `string`):

No description

## `content` (type: `string`):

No description

## `comments` (type: `string`):

No description

## `profiles` (type: `string`):

No description

# 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 = {
    "keywords": [
        "露营"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("molded_mountainpass/zhihu-hot-list-scraper").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 = { "keywords": ["露营"] }

# Run the Actor and wait for it to finish
run = client.actor("molded_mountainpass/zhihu-hot-list-scraper").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 '{
  "keywords": [
    "露营"
  ]
}' |
apify call molded_mountainpass/zhihu-hot-list-scraper --silent --output-dataset

```

## MCP server setup

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

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/N655cbg021LpgNCva/builds/YaCndmYjKXID01XSU/openapi.json
