# V2EX Scraper — Topics, Nodes & Replies (`hipersoft/v2ex-scraper`) Actor

Scrape V2EX tech-community topics: title, content, author, node, reply count and timestamps. Hot, latest or by node. Public API, no key.

- **URL**: https://apify.com/hipersoft/v2ex-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Developer tools, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.001 / topic scraped

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## V2EX Scraper — Topics, Nodes, Replies & Authors

Scrape **V2EX**, the popular Chinese tech and developer community, into clean JSON, CSV or Excel. This V2EX scraper extracts **title, content, author, node, reply count and timestamps** for the hottest topics, the newest topics, or every topic in the nodes you choose. Fast and reliable.

Perfect for **tech-trend monitoring, developer-community research, topic discovery and creator analytics**.

![V2EX Scraper input — mode, nodes and max topics in the Apify Console](https://api.apify.com/v2/key-value-stores/SUfvnaFLd9z9eBCtV/records/v2ex-scraper-input.png?v=2)

### What does V2EX Scraper do?

The V2EX Scraper collects discussion topics from V2EX and returns them as structured data. It supports three modes — hottest topics, latest topics, or topics from specific nodes — and extracts the title, full content, author, node and engagement metrics for each topic, so you can build a complete developer-community dataset.

### What data can you scrape from V2EX?

| Category | Fields |
|----------|--------|
| 📝 Topic | title, content, node, node title, topic URL |
| 👤 People | author, last reply by |
| 💬 Engagement | reply count |
| 🕒 Timestamps | created date, last touched date, collected date |

### Output

Each topic is returned as one clean record. Example output:

```json
{
  "id": 1230880,
  "title": "How do you keep learning as a senior engineer?",
  "content": "...",
  "author": "pc10201",
  "node": "programmer",
  "nodeTitle": "程序员",
  "replies": 180,
  "lastReplyBy": "someuser",
  "createdAt": "2026-07-27T10:00:00.000Z",
  "lastTouchedAt": "2026-07-30T11:52:06.000Z",
  "url": "https://www.v2ex.com/t/1230880",
  "collectedAt": "2026-07-30T12:00:00.000Z"
}
```

#### Output schema

| Field | Type | Description |
|-------|------|-------------|
| `id` | integer | Unique topic identifier. |
| `title` | string | Topic title. |
| `content` | string | Full topic body text. |
| `author` | string | Username of the topic author. |
| `node` | string | Node the topic belongs to. |
| `nodeTitle` | string | Display title of the node. |
| `replies` | integer | Number of replies on the topic. |
| `lastReplyBy` | string | Username of the last person to reply. |
| `createdAt` | string (ISO date) | When the topic was created. |
| `lastTouchedAt` | string (ISO date) | When the topic was last active. |
| `url` | string (URL) | Direct link to the topic. |
| `collectedAt` | string (ISO date) | Timestamp when the record was collected. |

### Use cases

- **Tech-trend monitoring** — track what developers are discussing across nodes.
- **Developer-community research** — analyze topics, engagement and active authors.
- **Topic discovery** — surface hot and rising threads by reply count.
- **Creator analytics** — study which authors and nodes drive discussion.
- **Sentiment and content analysis** — feed topic text into your own models.
- **Job and hiring signals** — watch job-related nodes for opportunities.

### How to scrape V2EX data

1. Add the V2EX Scraper to your Apify account.
2. Pick a mode — **hot**, **latest**, or **node**.
3. For node mode, add the node names you want (e.g. `programmer`, `qna`).
4. Set the maximum number of topics and click **Run**.
5. Export the results as JSON, CSV, Excel or XML, or pull them via the Apify API.

### Input

```json
{
  "mode": "node",
  "nodes": ["programmer", "qna"],
  "maxItems": 100
}
```

| Field | Type | Description |
|-------|------|-------------|
| `mode` | string | `hot` (hottest), `latest` (newest), or `node` (topics from chosen nodes). |
| `nodes` | array | Node names for `node` mode, e.g. `programmer`, `qna`, `jobs`, `python`. A node's name is in its URL: `v2ex.com/go/<name>`. |
| `maxItems` | integer | Maximum number of topics to scrape. |

### Need more developer and tech data?

- [Juejin Scraper](https://apify.com/hipersoft/juejin-scraper)
- [Hacker News Scraper](https://apify.com/hipersoft/hacker-news-scraper)
- [Stack Exchange Scraper](https://apify.com/hipersoft/stackexchange-scraper)
- [GitHub Scraper](https://apify.com/hipersoft/github-scraper)

### FAQ

**How many topics can I scrape?**
As many as you like — set `maxItems` to cap the run, or leave it high to pull everything available.

**Do I need any setup or a login?**
No setup and no login. Just add the actor, choose a mode, and run.

**How do I scrape a specific node?**
Use `node` mode and add the node name(s). Find a node's name in its URL: `v2ex.com/go/<name>`.

**What export formats are supported?**
JSON, CSV, Excel and XML, plus programmatic access through the Apify API.

**How does billing work?**
You pay only per item you get, so costs scale with the number of topics you scrape.

**Is the data only public data?**
Yes — the scraper returns only publicly available topic information.

**Can I integrate this with other tools?**
The V2EX Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JavaScript/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

### Related Actors

- [Douban Scraper](https://apify.com/hipersoft/douban-scraper)
- [Toutiao Scraper](https://apify.com/hipersoft/toutiao-scraper)
- [Weibo Scraper](https://apify.com/hipersoft/weibo-scraper)

### Notes

Original clean-room implementation. Returns only public data; you are responsible for compliance with V2EX's terms. Not affiliated with V2EX.

# Actor input Schema

## `mode` (type: `string`):

hot = hottest topics, latest = newest topics, node = topics from specific nodes.

## `nodes` (type: `array`):

Node names to scrape when mode = node (e.g. programmer, qna, jobs, apple, python). Find a node name in its URL: v2ex.com/go/<name>.

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

Maximum topics to scrape.

## Actor input object example

```json
{
  "mode": "hot",
  "nodes": [
    "programmer",
    "qna"
  ],
  "maxItems": 100
}
```

# Actor output Schema

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

The scraped results as dataset items.

# 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 = {
    "nodes": [
        "programmer",
        "qna"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/v2ex-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 = { "nodes": [
        "programmer",
        "qna",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/v2ex-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 '{
  "nodes": [
    "programmer",
    "qna"
  ]
}' |
apify call hipersoft/v2ex-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/v2ex-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/vVQAwY6R3WfVJr3hf/builds/VFnWSjoOgFMO8McQG/openapi.json
