Skip to main content
Glama

JD-PULL · 爬取 de JD · Análisis · Herramienta MCP

Python 3.10+ License: MIT MCP Tests

Una herramienta de código abierto de 爬取 de JD de empleo + análisis por reglas + retrato de puestos + servidor MCP. Cualquiera puede clonarla localmente, 爬取 y analizar sus propios datos, y exponerlos a Claude / DeepSeek agent / Pi agent / Cursor o cualquier IA externa compatible con MCP a través de MCP(Model Context Protocol).

┌──────────────────────────┐      ┌──────────────────────────┐
│  外部 AI(任何 MCP 客户端) │ ───► │  本机 jd-mcp 服务器        │
│  Claude / DeepSeek / Pi  │  MCP  │  ┌────────────────────┐  │
│  / Cursor …              │       │  │ 只读查询 · 写操作     │  │
└──────────────────────────┘       │  └────────┬───────────┘  │
                                    └──────────┼───────────────┘
                                               │ 读写
                                    ┌──────────▼───────────────┐
                                    │  你的数据目录(JD_DATA_DIR)│
                                    │  本地文件夹 或 私有 git 仓库 │
                                    └──────────────────────────┘

Los resultados de la 爬取 solo existen en tu directorio local data/ o en el repositorio de datos que tú mismo especifiques.

Características

  • 爬取 de JD:51job(Playwright con navegador real, Edge del sistema por defecto)爬取 cortés de baja frecuencia; interfaces reservadas para Boss直聘 / 拉勾 / 猎聘(requieren inicio de sesión/firma, no implementadas en esta versión);

  • Análisis por reglas:clasifica los JD en categorías de puestos según diccionarios de clasificación, extrae palabras de alta frecuencia de habilidades y responsabilidades;

  • Análisis fino con LLM(opcional, multi-proveedor):seis proveedores — Claude / OpenAI / Gemini / DeepSeek / Qwen / Ollama — con adaptación automática a la salida estructurada de cada uno mediante la «escalera de capacidades»;

  • Retrato de puestos:genera informes de distribución de habilidades / salario / experiencia / formación y palabras de alta frecuencia de responsabilidades por categoría(JSON + Markdown);

  • Servidor MCP:doble transporte stdio y streamable-http, herramientas de solo lectura siempre disponibles, herramientas de escritura habilitadas por defecto(desactivables con --no-write-tools), autenticación opcional por Bearer token en HTTP;

  • Datos completamente localesJD_DATA_DIR puede apuntar a cualquier directorio o repositorio git; si el directorio de datos no es un repositorio git independiente, sync se omite automáticamente para proteger los datos de confirmaciones accidentales.

Related MCP server: MCP Job Search Server

Stack tecnológico

Categoría

Tecnología

Lenguaje

Python ≥ 3.10

爬取

httpx + BeautifulSoup4(análisis estático); Playwright con navegador real(SPA de 51job, Edge del sistema por defecto channel=msedge, sin descargar chromium)

Análisis

Segmentación jieba + clasificación por diccionario de reglas; análisis fino con LLM vía SDK de anthropic / adaptación multi-proveedor con httpx

Datos

Almacenamiento local en archivos JSON; deduplicación por huella(dedup); estructura de directorios raw → classified → reports → site

Salida

Sitio de informes HTML estático(CSS en línea, sin dependencias de frameworks frontend)

MCP

mcp>=1.26(FastMCP)· doble transporte stdio + streamable-http · validación de datos con Pydantic v2

Configuración

YAML(PyYAML), sitios/diccionarios/LLM totalmente configurables sin modificar código

Pruebas

pytest(51 casos)

Sitios

51job(actualmente habilitado); Boss直聘 / 拉勾 / 猎聘(reservados, no implementados)

Instalación

Requiere Python ≥ 3.10.

git clone https://github.com/NaoYUN77/JD-PULL.git
cd JD-PULL
python -m venv .venv && .venv\Scripts\activate      # Windows;macOS/Linux 用 source .venv/bin/activate
pip install -e .[dev]
# 51job 爬取走真实浏览器(默认系统 Edge,无需额外下载 chromium)
# 若想用捆绑 chromium:删除 config/settings.yaml 中 crawl.browser.channel 一行后
#   playwright install chromium

Inicio rápido(primero tener datos)

Los sitios de empleo suelen tener controles anti-爬取. Mantén una frecuencia baja, usa un navegador real y 爬取 solo lo que necesites; si te bloquean, detente y no intentes evadirlo.

# 1) 生成样本 JD(验证全链路;51job 被 WAF 拦截时用)
jdcollector seed

# 2) 真实爬取(按 config/sites.yaml 的关键词/城市;51job 需本机有 Edge 且有头窗口)
jdcollector crawl

# 3) 规则分析(可选加 LLM 精分,见下文「LLM 多供应商精分」)
jdcollector analyze

# 4) 岗位群像报告
jdcollector portrait

# 5) 静态 HTML 报告站(输出到数据目录 site/)
jdcollector view

Los datos se escriben por defecto en data/ en la raíz del repositorio(ignorado por .gitignore, no se confirma en el repositorio).

Uso como servidor MCP

Una vez iniciado, las IAs externas pueden acceder a tus datos a través de MCP.

# stdio(默认,给本地桌面客户端用)
jd-mcp

# 只读模式(只暴露查询,不暴露爬取/分析等写工具)
jd-mcp --no-write-tools

# HTTP(streamable-http,给远程客户端 / 其它进程用,可带 Bearer token)
jd-mcp --transport http --host 0.0.0.0 --port 8000 --token 你的token

Claude Desktop

Edita claude_desktop_config.json:

{
  "mcpServers": {
    "jdcollector": {
      "command": "jd-mcp",
      "args": ["--transport", "stdio"]
    }
  }
}

Claude Code

claude mcp add jdcollector -- jd-mcp --transport stdio
claude mcp list   # 验证已连接

Cursor

Settings → MCP → + Add global MCP server, y en command escribe:

jd-mcp --transport stdio

Resumen de herramientas MCP

Tipo

Herramienta

Descripción

Solo lectura

get_stats

Estadísticas resumidas de datos(total / recuento por categoría)

Solo lectura

list_categories

Lista las categorías de puestos y su número de muestras

Solo lectura

search_jobs

Busca JD por palabra clave / categoría / ciudad / empresa(devuelve título, salario, habilidades, etc.)

Solo lectura

get_job

Obtiene el registro completo de un JD por job_id

Solo lectura

get_portrait

Informe de retrato de una categoría(JSON)

Solo lectura

get_portrait_markdown

Informe de retrato de una categoría(Markdown)

Escritura

crawl_jobs

爬取 local de JD(requiere Playwright / navegador); devuelve resultado estructurado {added, elapsed_s, per_site, warnings}, acepta _meta.progressToken para recibir notificaciones de progreso por tarea

Escritura

run_analysis

Análisis por reglas(análisis fino con LLM opcional)

Escritura

run_portrait

Genera informes de retrato por categoría

Escritura

build_site

Genera sitio de informes HTML estático

Escritura

sync_data

Confirma / envía el directorio de datos a su repositorio git

También se registran resources de solo lectura: jd://statsjd://portrait/{category}.

Despliegue HTTP y autenticación

jd-mcp --transport http --host 0.0.0.0 --port 8000 --token 你的token
# 环境变量亦可:JD_MCP_TRANSPORT / JD_MCP_HOST / JD_MCP_PORT / JD_MCP_TOKEN

El cliente se conecta a http://127.0.0.1:8000/mcp con el encabezado Authorization: Bearer 你的token. En producción se recomienda colocarlo detrás de un proxy inverso(Nginx / Caddy)con TLS habilitado; no expongas puertos en texto plano a Internet.

Directorio de datos y sincronización git

El directorio raíz de datos se especifica con la variable de entorno JD_DATA_DIR, por defecto <raíz del repositorio>/data(ignorado por git):

Variable de entorno

Función

JD_DATA_DIR

Directorio raíz de datos; puede ser una carpeta normal o un repositorio git independiente

JD_DATA_REPO

Sobrescribe la URL del repositorio destino para sync/push(si no se indica, usa el origin del repositorio de datos)

JD_GIT_TOKEN

Token incrustado en HTTPS, solo para este push(no se escribe en la configuración de git)

Lógica de decisión de sync_data / jdcollector sync:

  • El directorio de datos no es un repositorio git → solo guardado local, se omite git;

  • El directorio de datos está dentro de otro repositorio(por ejemplo, el ./data del propio repositorio de la herramienta)→ se omite git, para evitar que los datos se confirmen en un repositorio público;

  • El directorio de datos es un repositorio git independienteaddcommitpull --rebasepush.

Ejemplo: datos en un repositorio privado de GitHub

set JD_DATA_DIR=D:\jd-data
cd D:\jd-data && git init && git remote add origin git@github.com:you/jd-data.git
# 推送时可用
set JD_GIT_TOKEN=ghp_xxx

Análisis fino multi-proveedor con LLM

Sección llm: de config/settings.yaml:

llm:
  enabled: true        # 关闭即纯规则分析
  provider: deepseek   # 选供应商

Proveedor

provider

Variable de entorno

Modelo por defecto

Nivel de capacidad

Anthropic Claude

claude

ANTHROPIC_API_KEY

claude-sonnet-5

L3 schema estricto

OpenAI

openai

OPENAI_API_KEY

gpt-4o

L3 schema estricto

Google Gemini

gemini

GEMINI_API_KEY

gemini-2.5-flash

L3 schema estricto

DeepSeek

deepseek

DEEPSEEK_API_KEY

deepseek-chat

L2 modo JSON

通义千问

qwen

DASHSCOPE_API_KEY

qwen-plus

L2 modo JSON

Ollama(local)

ollama

Ninguna

qwen2.5:7b

L2 modo JSON

Escalera de capacidades:abstracción unificada LlmClient que selecciona automáticamente la forma de salida estructurada según la capacidad del proveedor — L3 usa el modo de schema estricto nativo de cada uno(Claude output_config / OpenAI response_format.json_schema / Gemini response_schema), L2 usa modo JSON(response_format.json_object de DeepSeek / Qwen, format:"json" de Ollama), L1 solo prompt como respaldo; si el nivel actual falla, degrada automáticamente. La salida se valida uniformemente con Pydantic; si faltan campos o son inválidos, reintenta una vez con retroalimentación de error, y si aún falla, vuelve al resultado de reglas sin interrumpir el flujo.

Con provider: claude, los model / api_key_env de nivel superior siguen siendo compatibles hacia atrás y sobrescriben los valores predefinidos; para otros proveedores, configura bajo llm.providers.<name>(el significado de cada campo está en los comentarios del archivo).

Estructura del proyecto

config/            # YAML 配置:settings / sites / categories / skills
src/jdcollector/
  crawler/         # 各站点爬虫
  analysis/        # 规则分类 + llm_client 能力梯子 + llm 精分
  portrait/        # 岗位群像报告
  view/            # 静态 HTML 报告站
  mcp_server.py    # MCP 服务器(工具注册 + CLI 入口)
  sync_github.py   # 数据目录 git 同步(独立仓库保护)
tests/             # pytest 单元测试

⚠️ Por favor, lee atentamente los siguientes términos antes de usar este proyecto.

  1. Restricción de uso:Este proyecto es solo para aprendizaje personal, análisis de datos e intercambio técnico; no constituye uso comercial ni base para decisiones de búsqueda de empleo / contratación.

  2. Los datos son responsabilidad del usuario:La 爬取 ocurre en tu propia máquina, y toda la responsabilidad de cumplimiento normativo de los datos recae en el usuario. Respeta los términos de servicio y robots.txt de los sitios objetivo, así como las leyes y regulaciones locales(como la Ley de Protección de Información Personal, la Ley de Seguridad de Datos y la Ley contra la Competencia Desleal).

  3. Límites de la 爬取:Solo se 爬取 páginas públicas; no se 爬取 información personal que requiera inicio de sesión o no sea pública; no se descifran captchas, no se evaden WAF / bloqueos, no se usan pools de proxies ni recolección a escala, y no se interfiere de ninguna manera con el servicio normal de los sitios objetivo. Si te bloquean, detente y nunca escales las medidas de confrontación.

  4. Precisión de los datos:El contenido de los JD es información pública del sitio y puede estar desactualizado o ser inexacto; el autor no garantiza su veracidad, integridad o disponibilidad; los datos de muestra seed integrados solo sirven para verificar el flujo completo y no representan información real de empleo.

  5. La salida de IA es solo de referencia:El análisis fino con LLM / las conclusiones de retrato son generadas por modelos de terceros y pueden contener sesgos; verifica manualmente antes de usar.

  6. Riesgo asumido por el usuario:Este proyecto se ofrece bajo licencia MIT; el autor no se hace responsable de pérdidas directas o indirectas, filtraciones de datos o riesgos legales derivados del uso de este proyecto.

Licencia

MIT © 2026 NaoYun777

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables searching over 1 million enriched job listings from 20,000+ companies directly from MCP-compatible AI tools. Provides tools for job search, company profiles, and AI-powered similar job recommendations with real-time data updates.
    4
    73
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to scrape job offers and filter them based on user-defined criteria, using MCP resources, prompts, and tools.
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables job search and scraping across multiple job boards (LinkedIn, Indeed, Glassdoor, etc.) with advanced filtering, directly from Claude Desktop or other MCP clients.
    5
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.
    564
    3
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NaoYUN77/JD-PULL'

If you have feedback or need assistance with the MCP directory API, please join our Discord server