# 104 人力銀行爬蟲｜職缺、數字化薪資、JD、技能標籤一鍵匯出（免 API） (`claude_code_reviewer/104-scraper`) Actor

免登入抓 104 人力銀行職缺：關鍵字搜尋列表與職缺詳情，薪資解析成數字，含公司、地區、產業、JD 全文與技能標籤，輸出 JSON／CSV／Excel。HR 分析、薪資 benchmark、人才市場研究必備。

- **URL**: https://apify.com/claude\_code\_reviewer/104-scraper.md
- **Developed by:** [Chad](https://apify.com/claude_code_reviewer) (community)
- **Categories:** Agents, Jobs, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 職缺搜尋

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

## 104人力銀行爬蟲（104 Scraper）

抓取 [104.com.tw](https://www.104.com.tw) 職缺搜尋列表。**薪資解析成數字**（`salary_min` / `salary_max`），可直接進 Excel、Tableau、dashboard 分析——這是跟市面上多數競品最大的差異（競品吐原始字串，這隻吐整數）。

> v1.0 為**搜尋模式**（含工作內容全文、技能標籤）。職缺詳情頁（完整福利制度、學歷/年資文字、招募人數）與公司檔案模式計畫於 **v1.1** 推出。

### 輸出欄位

| 欄位 | 說明 |
|------|------|
| `job_id` | 職缺 ID（104 jobNo） |
| `title` | 職缺名稱 |
| `company_id` | 公司 ID |
| `company_name` | 公司名稱 |
| `industry` | 行業別（文字） |
| `salary_min` | 薪資下限（整數，面議為 `null`） |
| `salary_max` | 薪資上限（整數，面議為 `null`） |
| `salary_desc` | 薪資說明（面議時為 `"面議"`） |
| `salary_type` | 薪資類型代碼（搜尋模式無此資料，固定為 `null`；v1.1 詳情模式提供） |
| `area` | 工作地區（行政區） |
| `address` | 工作地址 |
| `job_type` | 工作型態代碼 |
| `experience_required` | 工作年資要求（代碼，文字化計畫於 v1.1） |
| `education_required` | 學歷要求（代碼清單，逗號分隔） |
| `skills` | 技能標籤（陣列，合併職缺標籤與技能） |
| `description` | 工作內容全文 |
| `benefits` | 福利制度（搜尋模式無此資料，固定為 `null`；v1.1 詳情模式提供） |
| `remote_option` | 遠端選項代碼（0=不可，1=可，2=全遠端） |
| `headcount` | 招募人數（搜尋模式無此資料，固定為 `null`；v1.1 詳情模式提供） |
| `posted_at` | 刊登日（ISO 日期，如 `2026-06-30`） |
| `job_url` | 職缺連結 |
| `source_mode` | 來源模式（固定為 `search`） |
| `source_query` | 查詢條件（關鍵字） |
| `scraped_at` | 抓取時間（ISO 8601） |

缺值一律補 `null`，不省略欄位。

### 模式

| mode | 輸入 | 輸出 | 費用／筆 |
|------|------|------|---------|
| `search` | 關鍵字（`keywords` 或 `bulkInput`） | 職缺列表（含描述全文） | $0.002 |

### 輸入欄位

| 欄位 | 型別 | 說明 | 預設 |
|------|------|------|------|
| `mode` | string | 目前僅支援 `"search"` | `"search"` |
| `keywords` | string\[] | 搜尋關鍵字，最多 50 個 | — |
| `bulkInput` | string | 一行一個關鍵字，自動合併至 `keywords` | — |
| `maxItems` | integer | 每個關鍵字最多幾筆，1–500 | 50 |
| `proxyConfiguration` | object | Apify Proxy 設定（通常不需要） | 不開 |

### 輸入範例

**單一關鍵字**

```json
{
  "mode": "search",
  "keywords": ["後端工程師"],
  "maxItems": 100
}
```

**多關鍵字**

```json
{
  "mode": "search",
  "keywords": ["後端工程師", "DevOps"],
  "maxItems": 50
}
```

**批量搜尋（從 Excel 整欄貼上）**

```json
{
  "mode": "search",
  "bulkInput": "前端工程師\n行銷企劃\n產品經理",
  "maxItems": 50
}
```

### 注意事項

- **Cloudflare 保護**：104 全站有 Cloudflare JS 挑戰，`curl` 直打會 403。本 Actor 使用 got-scraping（模擬瀏覽器 TLS 指紋）繞過，通常不需要 Proxy。若遇到被擋，可開啟 `proxyConfiguration` 使用 Apify Residential Proxy。
- **薪資欄位**：`salaryLow`／`salaryHigh` 為 0 時表示面議，`salary_min`／`salary_max` 給 `null`，`salary_desc` 給 `"面議"`。
- **stale-stop**：連續 5 頁都沒有新職缺時自動停止，避免空轉浪費費用。
- **計費**：PPE 模式，只在資料成功寫入 dataset 後才計費。Run 結束後 log 印出 `total_items / charged / skipped` 供對帳。

### FAQ

**Q：可以用來監控特定關鍵字的新職缺嗎？**
A：可以。用 Apify 排程（Schedules）每天執行一次，搭配 `maxItems` 控制抓取量，適合 HR 市調或競業薪資分析。

**Q：為什麼有些職缺 `salary_min`／`salary_max` 是 `null`？**
A：104 的「面議」職缺不公開薪資數字，這類職缺 `salary_desc` 會是 `"面議"`。

**Q：有職缺詳情（完整福利制度、公司檔案）模式嗎？**
A：v1.0 僅提供搜尋模式，但 search 回應已包含工作內容全文。職缺詳情（福利制度全文、學歷/年資文字化、招募人數）與公司檔案模式計畫在 **v1.1** 加入。

**Q：支援篩選地區或工作類型嗎？**
A：v1.0 用關鍵字搜尋。地區篩選（area code）與工作類型篩選計畫在 v1.1 加入。

### 免責聲明

本工具僅供學術研究與個人資料分析使用。請遵守 104.com.tw 使用條款，勿過度抓取或用於商業競爭行為。作者不負任何因使用本工具造成的法律責任。

***

104爬蟲、104 API、職缺資料、薪資行情、人力銀行數據、招募市調、台灣職缺、HR分析、job scraper Taiwan、104.com.tw scraper、職缺自動化、薪資數字化

# Actor input Schema

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

要抓什麼？目前僅支援關鍵字搜尋（職缺詳情頁計畫於 v1.1 推出）。

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

搜尋關鍵字。例如：後端工程師、行銷企劃、會計師。

## `bulkInput` (type: `string`):

**一行一個關鍵字**，按 Enter 換行。從 Excel 複製整欄貼進來最快。

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

每個關鍵字最多抓幾筆。越多費用越高。

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

104 掛 Cloudflare，got-scraping 通常可直連。若遇到被擋才建議開啟。

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "後端工程師"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "mode": "search",
    "keywords": [
        "後端工程師"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("claude_code_reviewer/104-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 = {
    "mode": "search",
    "keywords": ["後端工程師"],
}

# Run the Actor and wait for it to finish
run = client.actor("claude_code_reviewer/104-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "search",
  "keywords": [
    "後端工程師"
  ]
}' |
apify call claude_code_reviewer/104-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=claude_code_reviewer/104-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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