Skip to main content
Glama
roshtarg-cpu

naukri-job-scraper-mcp

by roshtarg-cpu

🚀 Naukri.com 职位抓取器(适用于 Apify)

Apify Actor Python 3.11+ License: MIT

专业的 Naukri.com 职位抓取器 —— 通过先进的浏览器自动化和住宅代理提取全面的职位列表。非常适合 AI 代理、ChatGPT 插件、Claude 集成以及基于 MCP 的自动化工作流!🤖

🎯 功能特性

✨ 全面的数据提取

  • 职位 ID、职位名称、公司名称

  • 薪资范围与薪酬信息

  • 经验要求(最低/最高年限)

  • 地点与工作场所详情

  • 所需技能与技术栈

  • 完整职位描述

  • 职位直接链接

🔒 反机器人防护

  • Camoufox 浏览器自动化,具备真实指纹模拟

  • 通过 Apify 提供住宅代理支持

  • 模拟人类行为

  • GeoIP 匹配确保代理真实性

🛡️ 生产级就绪

  • 稳健的错误处理与重试机制

  • 优雅降级(缺失字段返回 null)

  • 实时数据推送至 Apify 数据集

  • 全面的日志记录与监控

🤖 AI 友好

  • 专为 Claude、ChatGPT 和 MCP 智能体构建

  • 干净、结构化的 JSON 输出

  • 时间戳跟踪确保数据新鲜度

  • 易于与 AI 工作流集成

Related MCP server: iCIMS Careers API

📊 输出结构

每个职位列表包含以下字段:

字段

类型

描述

示例

jobId

string

唯一职位标识符

"290524001234"

title

string

职位名称

"高级软件工程师"

companyName

string

公司名称

"Tech Corp India"

salary

string|null

薪资信息

"15-25 Lacs P.A."

experienceMin

integer|null

最低经验要求(年)

3

experienceMax

integer|null

最高经验要求(年)

5

location

string|null

职位地点

"Bangalore, Pune"

skills

array|null

所需技能

["Python", "AWS", "Docker"]

jobDescription

string|null

职位描述

"我们正在寻找..."

jobUrl

string|null

职位发布直接链接

"https://www.naukri.com/..."

scrapedAt

string

抓取时间戳(ISO 8601)

"2024-08-21T10:30:00.000Z"

🚀 快速开始

在 Apify 平台上运行

  1. 从本仓库创建新的 Actor

  2. 配置输入参数:

    • searchQuery:职位名称或关键词(例如 "software engineer")

    • location:城市名称(例如 "bangalore")或留空以搜索所有地点

    • maxResults:要抓取的职位数量(1-500)

  3. 运行 Actor 并从数据集中访问结果

输入示例

{
  "searchQuery": "data scientist",
  "location": "bangalore",
  "maxResults": 100
}

使用预填充选项

我们为常见搜索提供了便捷的预填充选项:

  • 🔧 软件工程师 - 班加罗尔

  • 📊 数据科学家 - 全印度

  • 📱 产品经理 - 孟买

  • ⚙️ DevOps 工程师 - 浦那

  • 💻 全栈开发人员 - 海得拉巴

🤖 AI 集成示例

Claude Desktop (MCP)

通过 Apify MCP 服务器直接从 Claude Desktop 使用此 Actor:

{
  "apify": {
    "actorId": "your-actor-id",
    "input": {
      "searchQuery": "machine learning engineer",
      "location": "bangalore",
      "maxResults": 50
    }
  }
}

ChatGPT Actions

使用 Apify 的 API 与 ChatGPT 集成:

openapi: 3.0.0
paths:
  /v2/acts/{actorId}/runs:
    post:
      summary: Scrape Naukri.com jobs
      parameters:
        - name: actorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              properties:
                searchQuery:
                  type: string
                location:
                  type: string
                maxResults:
                  type: integer

Python 集成

from apify_client import ApifyClient

client = ApifyClient('your-apify-token')

# Start the actor
run = client.actor('your-actor-id').call(run_input={
    'searchQuery': 'python developer',
    'location': 'mumbai',
    'maxResults': 100
})

# Fetch results
dataset_items = client.dataset(run['defaultDatasetId']).list_items().items

for job in dataset_items:
    print(f"{job['title']} at {job['companyName']}")
    print(f"Location: {job['location']}")
    print(f"Salary: {job['salary']}")
    print(f"Skills: {', '.join(job['skills'] or [])}")
    print(f"URL: {job['jobUrl']}\n")

Node.js 集成

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'your-apify-token' });

// Start the actor
const run = await client.actor('your-actor-id').call({
    searchQuery: 'react developer',
    location: 'bangalore',
    maxResults: 50
});

// Fetch results
const { items } = await client.dataset(run.defaultDatasetId).listItems();

items.forEach(job => {
    console.log(`${job.title} at ${job.companyName}`);
    console.log(`Location: ${job.location}`);
    console.log(`Skills: ${job.skills?.join(', ')}`);
});

🔧 本地开发

前提条件

  • Python 3.11+

  • Docker(用于容器化测试)

设置

# Clone the repository
git clone <your-repo-url>
cd naukri-job-scraper-mcp

# Install dependencies
pip install -r requirements.txt

# Set environment variables
export APIFY_TOKEN=your_apify_token

# Run locally
python -m src

使用 Apify CLI 进行测试

# Install Apify CLI
npm install -g apify-cli

# Login to Apify
apify login

# Run the actor locally
apify run

📋 技术细节

技术栈

  • 语言:Python 3.11

  • 浏览器自动化:Camoufox(基于 Firefox 的隐身浏览器)

  • HTML 解析:BeautifulSoup4 + lxml

  • 平台:Apify Actor 框架

  • 代理:Apify 住宅代理

架构

┌─────────────────┐
│  Apify Platform │
└────────┬────────┘
         │
    ┌────▼─────┐
    │   Actor  │
    └────┬─────┘
         │
    ┌────▼────────┐
    │  Camoufox   │ ◄──── Residential Proxy
    │  Browser    │
    └────┬────────┘
         │
    ┌────▼──────────┐
    │  Naukri.com   │
    │  (Next.js SPA)│
    └────┬──────────┘
         │
    ┌────▼─────────┐
    │  BeautifulSoup│
    │  Parser       │
    └────┬─────────┘
         │
    ┌────▼─────────┐
    │ Apify Dataset│
    └──────────────┘

错误处理

  • 重试逻辑:3 次尝试,采用指数退避策略

  • 优雅失败:字段缺失时返回 null 而非崩溃

  • 代理回退:住宅代理失败时继续运行(不使用代理)

  • 日志记录:提供全面的错误日志以辅助调试

🌟 使用场景

  • 🎯 就业市场研究:分析薪资趋势与技能需求

  • 🤖 AI 驱动的职位匹配:将数据输入 LLM 以提供个性化推荐

  • 📈 招聘分析:跟踪招聘趋势与公司动态

  • 🔔 职位提醒:构建自动化通知系统

  • 💼 职业规划:了解各行业的经验要求

🛠️ 自定义

修改搜索参数

编辑 src/main.py 以添加自定义筛选条件:

# Add custom filters
experience_filter = actor_input.get('experienceRange', '')
salary_filter = actor_input.get('salaryMin', '')

扩展数据提取

编辑 src/parser.py 以提取更多字段:

# Add new field extraction
posted_date = _clean_text(job_card.select_one('.posted-date').get_text())
job_data['postedDate'] = posted_date

📝 许可证

MIT 许可证 —— 可自由用于商业或个人项目。

🤝 贡献

欢迎贡献!请随时提交 Pull Request。

💬 支持

  • 📧 问题:在 GitHub 上提交 issue

  • 💡 功能请求:通过 GitHub Issues 提交

  • 📚 文档:Apify 文档

🎉 由 AI 构建

此 Actor 在 Claude AI 的协助下构建,并针对 AI 智能体工作流、MCP 集成和 ChatGPT 自动化进行了优化。非常适合构建智能求职助手!🚀


为 AI 自动化社区倾心打造 ❤️

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search, filter, and extract job listings from LinkedIn using an automated headless browser with semantic AI filtering and deduplication.
    10 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables users to retrieve live job postings from any iCIMS career site, providing structured data including title, requisition ID, employer, locations, employment type, dates, salary, and apply links.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables natural-language job search and aggregation from multiple recruitment websites with zero configuration, providing filtered results and standardized output for AI assistants.
    64 npm
    ISC