Skip to content

Repository files navigation

招聘信息自动化收集系统

面向电气工程及其自动化、能源电力、电网、新能源、自动化控制等方向应届生的招聘信息自动化收集与 AI 分析系统。系统通过 FastAPI 提供 WebUI 和 API,使用 SQLite 存储职位数据,内置 32 个招聘信息爬虫,支持 12 小时定时采集、日报/周报生成。

架构概览

浏览器 WebUI
  |-- 仪表盘 / 职位列表 / 职位详情
  |-- AI 总结 ChatBox
  |     |-- 左侧:日报 / 周报 / 最近对话
  |     |-- 中间:总结内容、对话追问、思考过程展示
  |     `-- 设置:Provider / API Key / 模型 / 思考强度
  |
  v
FastAPI 应用
  |-- Web 路由:Jinja2 页面渲染
  |-- API 路由:职位查询 / 统计 / 采集触发 / 总结生成 / 对话
  |-- Settings API:模型提供方、API Key、模型列表配置
  |-- APScheduler:12 小时采集 / 每周日 20:00 周报
  |
  +--> 爬虫模块
  |     |-- 发电集团 / 电网 / 核电 / 装备制造
  |     |-- 新能源 / 电动汽车 / 招聘平台 / 高校就业网
  |
  +--> AI 模块
  |     |-- DeepSeek 日报 / 周报生成
  |     |-- OpenAI 兼容接口
  |     |-- Anthropic Messages API
  |     `-- Gemini:通过设置面板添加自定义提供方支持
  |
  v
SQLite 数据库
  |-- companies
  |-- jobs
  |-- summary_logs
  |-- provider_configs
  |-- chat_sessions
  `-- chat_messages

技术栈

  • Python 3.10+
  • FastAPI + Uvicorn
  • SQLAlchemy Async + aiosqlite
  • SQLite
  • Jinja2
  • Tailwind CSS CDN
  • APScheduler
  • httpx + BeautifulSoup4
  • OpenAI SDK 兼容 DeepSeek / OpenAI 兼容接口
  • Anthropic HTTP API 调用
  • Gemini API 模式:通过自定义 Provider 支持
  • cpca:中文地点识别与省级筛选辅助
  • python-dotenv + pydantic-settings
  • marked.js:AI 总结 Markdown 渲染

快速开始

Windows 一键启动

双击 start.bat 即可完成 Python 检查、依赖安装、.env 初始化、目录创建、数据库表初始化和服务启动。

启动后访问:

手动启动

python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
python run.py

Linux/macOS 环境:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python run.py

主要功能

  • 仪表盘:展示今日新增职位、来源分布、类别分布和最新职位。
  • 职位列表:支持关键词搜索、分类过滤、类型过滤、来源过滤和省级地点筛选。
  • 职位详情:查看岗位描述、专业要求、发布时间、截止时间和来源链接。
  • AI 总结 ChatBox:左侧展示日报、周报和最近对话;中间展示总结内容并支持继续追问。
  • 多模型支持:内置 DeepSeek、OpenAI、Anthropic;Gemini 可通过设置面板添加自定义提供方使用。
  • 思考强度调节:支持 offlowmediumhighxhighmax,实际可选项由 Provider 配置决定。
  • 自动采集:当前注册 32 个爬虫,默认每 12 小时自动运行一次。
  • 手动采集:仪表盘可点击“手动触发采集”,也可调用 API。
  • 定时周报:每周日 20:00 自动生成最近 7 天招聘周报。
  • API 文档:FastAPI 自动提供 /docs 交互式接口文档。

爬虫列表

当前 run_all_crawlers() 注册 32 个爬虫,按来源类型分组如下。

发电集团 / 电网 / 电力建设

  • 国家电网招聘平台:SGCCCrawler
  • 南方电网招聘:CSGCrawler
  • 中国华能:HuanengCrawler
  • 中国大唐:DatangCrawler
  • 中国华电:HuadianCrawler
  • 国家能源集团:GuonengCrawler
  • 国家电投:GuodianCrawler
  • 中国电建:PowerChinaCrawler
  • 中国能建:EnergyChinaCrawler

核电

  • 中核集团:CNNCCrawler
  • 中广核:CGNCrawler

装备制造 / 自动化

  • 中国电气装备:CEEGCrawler
  • 汇川技术:InovanceCrawler
  • 西门子:SiemensCrawler
  • ABB:ABBCrawler
  • 施耐德电气:SchneiderCrawler

新能源 / 储能 / 风光

  • 宁德时代:CATLCrawler
  • 隆基绿能:LongiCrawler
  • 阳光电源:SungrowCrawler
  • 金风科技:GoldwindCrawler
  • 华为数字能源:HuaweiDigitalCrawler

电动汽车

  • 比亚迪:BYDCrawler
  • 蔚来:NIOCrawler
  • 小鹏汽车:XPengCrawler

招聘平台

  • BOSS 直聘:BossCrawler
  • 51job:Job51Crawler
  • 智联招聘:ZhilianCrawler
  • 北极星电力网:BeixingCrawler

高校就业网

  • 华北电力大学就业网:NCEPUCrawler
  • 上海电力大学就业网:SHIEPCrawler
  • 东北电力大学就业网:NEEPUCrawler
  • 三峡大学就业网:CTGUCrawler

爬虫统一写入 companiesjobs 表,职位来源 URL 作为去重依据。

AI 功能

日报 / 周报

  • 日报:默认汇总当天新增职位,包含岗位概览、重点推荐、行业趋势和应届生建议。
  • 周报:默认汇总最近 7 天新增职位,对比上一周期,分析企业、岗位类型、地区分布和下周关注方向。
  • 自动生成:采集结束后会尝试生成日报;每周日 20:00 定时生成周报。
  • 手动生成:仪表盘可点击“生成今日日报”,也可调用 /api/summaries/generate

如果指定周期内没有新增职位,系统会跳过总结生成并返回提示。

交互式对话

AI 总结页提供交互体验:

  • 左侧列表:日报、周报、最近对话。
  • 中间聊天区:展示总结内容、用户追问和模型回复。
  • 上下文关联:选择某条日报/周报后继续追问,系统会把该总结作为上下文。
  • 会话保存:对话存入 chat_sessionschat_messages
  • 思考过程:支持返回 reasoning content 的模型会展示思考过程折叠面板。

多模型和思考强度

内置 Provider:

  • DeepSeek:deepseek-chatdeepseek-reasoner
  • OpenAI:gpt-4ogpt-4o-minio4-mini
  • Anthropic:claude-fable-5claude-opus-4-8claude-sonnet-4-6claude-haiku-4-5

Gemini 支持方式:

  1. 打开 /summaries
  2. 点击右上角设置按钮。
  3. 添加自定义提供方。
  4. api_mode 选择 gemini
  5. 填写 Gemini API Key,并获取或手动填写模型列表。

思考强度由 Provider 的 effort_levels 控制。OpenAI 推理模型会映射为 reasoning_effort;Anthropic 和 Gemini 会映射为各自的 thinking budget。

配置说明

.env

首次运行 start.bat 时,如果不存在 .env,会从 .env.example 复制生成。常用配置如下:

DATABASE_URL=sqlite+aiosqlite:///data/jobs.db
DEEPSEEK_API_KEY=your_deepseek_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
CRAWL_INTERVAL_HOURS=12
OPENAI_API_KEY=your_openai_key_here
ANTHROPIC_API_KEY=your_anthropic_key_here

说明:

  • DATABASE_URL:数据库连接地址,默认使用项目内 data/jobs.db
  • DEEPSEEK_API_KEY:日报、周报默认使用的 DeepSeek API Key。
  • DEEPSEEK_BASE_URL:DeepSeek API 地址。
  • DEEPSEEK_MODEL:日报、周报默认调用的模型。
  • CRAWL_INTERVAL_HOURS:自动采集间隔,默认 12 小时。
  • OPENAI_API_KEY / ANTHROPIC_API_KEY:ChatBox 使用对应内置 Provider 时的环境变量配置方式。

设置面板 WebUI

打开 /summaries 后点击设置按钮,可以在 WebUI 中:

  • 查看内置 Provider。
  • 保存或更新 API Key。
  • 修改 Provider 的 API Host、API Path 和模型列表。
  • 新增自定义 Provider。
  • 为自定义 Provider 选择 openai_compatibleanthropicgemini 模式。
  • 获取 Provider 模型列表。

内置 Provider 不能改名或改变 API 模式;自定义 Provider 可以删除。

API 常用入口

# 触发全量采集
curl -X POST http://127.0.0.1:8000/api/crawl/trigger

# 获取统计信息
curl http://127.0.0.1:8000/api/stats

# 查询职位
curl "http://127.0.0.1:8000/api/jobs?page=1&page_size=20&keyword=电气"

# 生成日报
curl -X POST http://127.0.0.1:8000/api/summaries/generate ^
  -H "Content-Type: application/json" ^
  -d "{\"summary_type\":\"daily\"}"

部署指南

Windows 桌面或服务器

  1. 确认 Python 3.10+ 已安装并加入 PATH。
  2. 双击 start.bat 启动前台服务。
  3. 如需开机自启,右键以管理员身份运行 setup_task.bat
  4. 计划任务名称为 RecruitmentCollector,系统启动时通过 start_hidden.vbs 后台运行。

Linux 云服务器 systemd

创建 /etc/systemd/system/recruitment-collector.service

[Unit]
Description=Recruitment Collector
After=network.target

[Service]
WorkingDirectory=/opt/recruitment-collector
ExecStart=/opt/recruitment-collector/.venv/bin/python run.py
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable recruitment-collector
sudo systemctl start recruitment-collector
sudo systemctl status recruitment-collector

生产环境建议放在 Nginx 后面反向代理,并将 run.py 中 Uvicorn 的 reload=True 调整为关闭。

目录结构

.
|-- app/
|   |-- crawlers/              # 爬虫实现
|   |   |-- enterprise/        # 企业官网 / 招聘站
|   |   `-- university/        # 高校就业网
|   |-- routes/                # API、Web、设置路由
|   |-- static/                # CSS、JS
|   |-- summarizer/            # AI 总结与 ChatBox LLM 调用
|   |-- templates/             # Jinja2 页面模板
|   |-- utils/                 # 清洗、地点筛选等工具
|   |-- config.py              # 配置读取和 Provider 初始化
|   |-- database.py            # 数据库连接与初始化
|   `-- models.py              # 数据模型
|-- data/                      # SQLite 数据库目录
|-- run.py                     # 应用入口和定时任务注册
|-- seed_data.py               # 种子数据
|-- requirements.txt           # Python 依赖
|-- start.bat                  # Windows 一键启动
|-- start_hidden.vbs           # Windows 后台启动
|-- setup_task.bat             # Windows 计划任务注册
|-- test_location_filter.py    # 地点筛选测试
`-- test_summarizer.py         # AI 总结测试

常见问题

双击 start.bat 提示未检测到 Python 怎么办?

安装 Python 3.10+,并在安装时勾选 “Add Python to PATH”。安装完成后重新打开终端或重新双击 start.bat

依赖安装失败怎么办?

可以手动运行:

pip install -r requirements.txt

如果网络较慢,可以配置国内镜像源后重试。

访问 AI 总结时报错怎么办?

检查 .env 或设置面板中对应 Provider 的 API Key 是否配置正确,并确认当前机器可以访问对应模型服务。

为什么日报提示没有新增职位?

日报只统计当天新增职位。如果当天没有采集到新职位,系统会跳过生成。

为什么周报没有生成?

周报默认每周日 20:00 生成最近 7 天数据。如果该周期没有新增职位,系统会跳过生成。也可以在页面或 API 中手动触发。

为什么页面显示最后采集时间暂无数据?

系统通过数据库中最新职位的 created_at 推断最后采集时间。数据库为空时会显示暂无数据。

如何手动触发采集?

打开仪表盘点击“手动触发采集”,或调用:

curl -X POST http://127.0.0.1:8000/api/crawl/trigger

如何查看接口文档?

启动服务后访问 http://127.0.0.1:8000/docs,FastAPI 会提供交互式 API 文档。

Gemini 怎么配置?

进入 /summaries,打开设置面板,添加自定义 Provider,将 API 模式设为 gemini,填写 Gemini API Key 和模型列表,保存后即可在 ChatBox 中选择使用。

About

招聘信息自动化收集系统 — 面向电气工程应届生,32 爬虫覆盖电力/新能源/自动化,ChatBox AI 多模型对话

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages