MCjob 用于抓取小木虫招聘版岗位信息,做结构化修复(规则 + 可选 Ollama),并提供:
- SQLite 数据存储
- 中国省份岗位热力地图(ECharts)
- 每周邮件推送(周一 09:00)
MCjob/
├── agent.md
├── bin/
│ ├── run.sh
│ ├── web.sh
│ ├── send_weekly_mail.sh
│ ├── install_cron.sh
│ └── install_mail_cron.sh
├── config/
│ ├── settings.yaml
│ └── mail.yaml
├── data/
│ ├── mcjob.sqlite3
│ ├── gb2260.tsv
│ ├── gb2260_stats_201810.tsv
│ └── cache/
├── log/
├── src/
│ ├── main.py
│ ├── core/
│ │ ├── config.py
│ │ └── logger.py
│ ├── domain/
│ │ └── post.py
│ ├── db/
│ │ ├── post_repository.py
│ │ └── sql_loader.py
│ ├── sql/
│ │ ├── create_posts_table.sql
│ │ ├── create_indexes.sql
│ │ ├── select_*.sql
│ │ └── insert/update_*.sql
│ ├── clients/
│ │ └── http_client.py
│ ├── services/
│ │ ├── crawler_runner.py
│ │ ├── dedup_cache.py
│ │ ├── field_repair.py
│ │ └── location.py
│ ├── notifications/
│ │ └── mailer.py
│ ├── spider/
│ │ └── muchong_spider.py
│ ├── push/
│ │ └── weekly_report.py
│ └── web/
│ ├── app.py
│ ├── templates/index.html
│ └── static/
└── venv/
cd /vol2/1000/Software/MCjob
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt./bin/run.sh强制修复已有记录(会回填/重修复历史行):
./bin/run.sh --repair-existing去重机制:
- 批内去重:
title - 每日缓存去重:
data/cache/YYYY-MM-DD.txt - 数据库去重:
posts.title唯一索引 + 插入/更新分离写入
启动:
./bin/web.sh --port 8008访问:
http://192.168.31.2:8008
接口:
GET /api/summaryGET /api/province-statsGET /api/jobs?province=北京&limit=300province=海外/province=未知也可用于侧栏筛选
预览(不发信):
./bin/send_weekly_mail.sh --dry-run发送:
./bin/send_weekly_mail.sh默认 dry-run 预览输出:
log/weekly_mail_preview.html
安装每日爬虫(每天 00:00):
./bin/install_cron.sh安装每周推送(每周一 09:00):
./bin/install_mail_cron.sh查看当前 cron:
crontab -l程序日志(由 setup_logger 生成):
log/crawler_YYYYMMDD.loglog/weekly_report_YYYYMMDD.log
cron 重定向日志:
log/cron_YYYYMMDD.loglog/mail_cron_YYYYMMDD.log
config/settings.yaml:
crawler.*:列表页 URL、请求重试、频率、最大抓取数ai_repair.*:字段修复开关与 Ollama 参数paths.*:数据库、缓存、日志路径web.*:默认监听地址和端口
当前环境 Ollama 服务端口为 11435,默认配置:
ai_repair:
enable_llm: true
model: "qwen3:8b"
ollama_base_url: "http://127.0.0.1:11435"
llm_retries: 2
llm_retry_backoff: 1.8
llm_max_backoff: 8.0
llm_queue_timeout: 45
llm_cooldown_seconds: 90config/mail.yaml:
- SMTP 参数:
SMTP_HOST/SMTP_PORT/SMTP_USER/SMTP_PASS/... - 收件人:
MAIL_TO - 关键词与匹配字段:
WEEKLY_KEYWORDS,WEEKLY_KEYWORD_FIELDS
main.py只负责参数解析与启动。services/crawler_runner.py负责爬虫编排。db/post_repository.py统一数据访问,SQL 从src/sql/*.sql加载。web/app.py与push/weekly_report.py均复用同一套配置与仓储,不再重复写 SQL。misc历史目录已移除。
- 地图空白:
- 先检查
/api/province-stats是否有数据。 - 检查浏览器控制台是否有 ECharts/map 资源错误。
- 先检查
- AI 未触发:
- 检查
settings.yaml的ollama_base_url和model。 - 在主机执行:
curl http://127.0.0.1:11435/api/tags
- 检查
- 邮件未发送:
- 先执行
--dry-run确认内容正常。 - 再检查 SMTP 账号、授权码和
log/mail_cron_YYYYMMDD.log。
- 先执行