抓取 Boss直聘(zhipin.com)发布的招聘信息, 以网页表格展示, 一键导出 PDF / CSV。
数据仅保存在本地 data/jobs.json, 不上传任何服务器。
┌──────────────┐ DrissionPage 本机浏览器 ┌───────────────┐
│ Boss直聘 │ ─── 监听 joblist.json ───→ │ scraper.py │
│ 搜索结果页 │ (DOM 解析兜底) │ 规范化/去重 │
└──────────────┘ └──────┬────────┘
↓ storage.py (data/jobs.json)
┌─────────────────────────────────┐
│ server.py (Flask, 127.0.0.1:8765)│
│ 表格展示 / 筛选排序 / 抓取调度 │
│ 导出 PDF(reportlab) / CSV │
└─────────────────────────────────┘
- 抓取: 输入职位关键词 + 城市 + 页数, 自动打开浏览器翻页抓取(每页约 30 条), 按链接去重后合并入库
- 表格展示: 网页端表格, 支持关键词筛选(职位/公司/技能/地区)、点击列头排序、薪资估算均值统计
- 导出 PDF: 横版 A4 报表, 中文表格排版(表头深蓝、斑马纹、薪资橙色高亮、职位名可点击跳转), 导出范围跟随当前筛选词
- 导出 CSV: UTF-8 BOM 编码, Excel 双击打开不乱码
- 登录态复用: 登录一次保存在
auth/profile, 之后无需重复扫码 - 反风控: 使用 DrissionPage 驱动本机 Chrome/Edge(原生 CDP 按需通信), 不启用会被 Boss 风控识别的自动化接口
- Windows / macOS / Linux,Python 3.9+(开发环境为 3.14)
cd Job-Catch
pip install -r requirements.txt国内网络加速(可选):
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple无需再单独安装浏览器内核, 抓取直接使用你电脑上已装的 Chrome/Edge。
python server.py启动后自动打开 http://127.0.0.1:8765:
- 填写职位关键词、选择城市、设置页数, 点击 开始抓取;
- 工具会先打开 Boss直聘首页(优先使用你电脑上已装的 Chrome/Edge), 未登录时在窗口里扫码登录即可, 登录成功后自动开始抓取; 首次登录之后长期复用;
- 如搜索页弹出安全验证, 在窗口里手动完成, 工具会自动继续;
- 抓取完成后表格自动刷新, 可筛选、排序, 点击 导出 PDF / 导出 CSV 下载。
也可以只抓取不开界面:
python catch.py "Python" 深圳 3 # 关键词 城市(可选, 默认全国) 页数(可选, 默认1)城市参数支持内置中文名: 全国/北京/上海/深圳/广州/杭州/成都/南京/武汉/西安/长沙/重庆/郑州/天津/合肥/厦门,
也支持直接填 Boss直聘城市代码(在官网切换城市后从地址栏 city= 参数获取, 如 101280600)。
- PDF: 导出的是"当前数据 + 当前筛选词"的结果; 想只导出某类职位, 先在筛选框输入关键词再点导出
- CSV: 列含 职位/薪资/地区/经验/学历/技能/公司/行业/规模/融资/招聘者/链接/抓取时间 等 16 列
- 抓取失败或结果异常时,
debug/目录会自动保存当时的页面快照(HTML + 截图), 便于排查
Job-Catch/
├── server.py # Flask 服务: 网页界面 + API + 抓取调度(主入口)
├── catch.py # 命令行抓取入口
├── scraper.py # DrissionPage 抓取: 接口监听为主, DOM 解析兜底, 薪资解析
├── storage.py # 本地存储 data/jobs.json(去重/合并/CSV)
├── pdf_export.py # PDF 报表生成(reportlab, 中文字体自动回退)
├── templates/ # 网页模板
├── static/ # 前端样式与逻辑(原生 JS, 无需构建)
├── data/jobs.json # 抓取结果(运行后生成)
└── auth/profile/ # 浏览器登录态(运行后生成, 登录一次即可)
- 登录窗口一片空白(旧版 Playwright 方案的问题): Boss直聘的风控能识别 Playwright 这类全量接管 CDP 的自动化特征, 命中后页面会被主动跳成 about:blank。现已改用 DrissionPage 驱动本机浏览器, 登录界面可正常显示; 若你仍停留在旧版本, 请执行
pip install -r requirements.txt升级后重试 - 窗口一直闪 / 页面刷个不停, 没法扫码: 这是未登录直闯搜索页触发了风控的"验证刷新循环"。现已修复: 先在首页登录、优先使用本机 Chrome/Edge。若仍遇到, 先关闭任务栏里残留的抓取浏览器窗口(标题空白的 Chrome/Edge)再重试
- 一直提示"检测到登录/安全验证": 在弹出的浏览器窗口里扫码登录/拖动验证即可, 完成后自动继续; 登录态会记住, 下次不再需要
- 抓到 0 条: 可能是关键词在该城市无结果, 或触发了验证; 看
debug/里的页面快照确认 - 城市代码不对/想加城市: 在 Boss直聘官网切到目标城市, 复制地址栏
city=后的数字, 抓取时直接填该代码 - 端口被占用: 修改
server.py末尾的port=8765 - PDF 中文乱码(极少数精简版系统): 工具会自动回退到内置 CID 字体; 也可自行安装微软雅黑
- 本工具仅供个人求职检索使用, 请勿用于商业用途或批量转售数据
- 请控制抓取频率(工具已内置每页 2.5~4.5 秒随机等待, 页数上限 10 页), 遵守 Boss直聘用户协议与 robots 约定
- 抓取的职位信息版权归 Boss直聘及发布方所有
