feat: collection-only Zhilian and 51job support - #62
Conversation
新增自包含的 51job(前程无忧)采集模块 jobs_51job.py,含: - 分簇节奏(BurstPacer)防风控:簇内快 + 簇间长停 - 薪资严格过滤(中文万/千/年薪解析) - 排除词 / JD排除词 / 屏蔽公司 - 风控检测(静默降级三信号 + L0-L3 风险等级)+ 风控日志 - 断点续采(关键词级 checkpoint,默认自动续采) 配套改动: - db.py:jobs 表加 source 字段(boss/51job 区分)+ collect_progress 表 - jobs.py(BOSS):source 字段 + 断点续采 + db 路径跟随 _base_dir⚠️ 声明:本模块仅个人本地测试通过,未经过充分生产验证。 使用者在真实环境(尤其国内 IP)运行采集,可能触发 51job 风控, 由此导致的账号限流、封禁等后果由使用者自行承担,本仓库维护者不负责。 详见:src/bosshunter/scraper/jobs_51job模块说明.md
Selectively adapted from PR #55: structured education and campus/social fields, filters, scoring context, exports, and greeting preference. Co-authored-by: XinPeng76 <xinpeng@bupt.edu.cn>
Selectively adapted from PR #61 so invalid Markdown bytes cannot enter the local resume store. Co-authored-by: 蔡志鹏 <caizhipeng318@gmail.com>
Adapted from PR #65 with server-side platform and status guards. Co-authored-by: XinPeng76 <xinpeng@bupt.edu.cn>
|
已合并 PR #66 的账号安全能力,并按本次多平台边界做了范围修正:新增唯一岗位、搜索页、详情页和页面访问总量都只统计 BOSS 直聘;智联与 51job 不消耗这些额度。BOSS 达到额度后仅跳过 BOSS,外部平台采集继续;验证码/拦截等真实风险仍会安全停机。采用了单页签复用、列表预筛、连续失败阈值、跨重启风险锁和 BOSS 采集到投递冷却。整合分支离线回归 390 passed、16 subtests,前端构建通过。 |
|
按最新安全判断完成修正:采集结果数量不是页面访问风险,因此 BOSS、智联、51job 已全部移除“目标新增”和“单日新增不超过 100”。界面与配置页只保留最大页数、排序等采集设置;旧 config.yaml 中残留的 target_count、default_target_count、daily_new_jobs_limit 会在读取时忽略、保存时清除。PR #66 的页面访问守卫、单页签复用、预筛、连续失败停止、风险锁和冷却仍保留,其中搜索页/详情页/全局页面额度只作用于 BOSS。最新提交 73cc992;全量回归 387 passed、16 subtests,配置专项 21 passed,前端生产构建通过。 |
|
补充 51job 北京采集支持:加入官方城市编码 010000,城市目录现为北京、上海;同时修复原列表解析将详情链接固定拼成上海路径的问题,改为读取每张岗位卡片的真实 51job 详情链接,避免北京岗位打开错误地址。未知城市仍拒绝猜测编码。提交 8f63546,相关采集/编排/API 回归 76 passed。 |
|
本轮补充验证与采用结论:\n\n- BOSS 采集等待整体放慢为原来的 1.5 倍(常规节流 3–7.5 秒,页面加载/滚动/详情等待同步放慢)。\n- BOSS 采集工作标签页改为后台打开,不再主动抢占前台窗口或移动系统鼠标。\n- 检测到 captcha / rate limit / blocked / 登录失效后,本轮立即停止,并设置随机 5–10 分钟冷却;冷却结束后由用户重新开始,不做自动绕过或自动续跑。\n- PR #27 中的浏览器鼠标事件用于发送流程点击真实控件,现有功能路径继续保留;没有把伪造/随机鼠标轨迹加入采集流程。\n- 上述冷却和延迟可在面板“BOSS 直聘采集安全”中调整,且只作用于 BOSS 采集。\n\n验证:\n- Python 全量测试:390 passed,另含 16 subtests passed。\n- 前端生产构建通过。\n- diff check 与配置 schema 校验通过。 |
|
修正 BOSS 风险检测误报(用户反馈此前账号正常但采集频繁显示 blocked):\n\n- 确认当前 BOSS 登录/聊天页正常;此前两次停止都发生在“增长”列表加载阶段,旧规则会把页面正文中任意孤立的“403”判为拦截。\n- 正文孤立的 403/风险词不再触发;正常岗位列表或详情存在时忽略正文风险词。\n- 仅明确验证控件、验证/拦截 URL、拦截标题,或没有正常岗位内容的标准错误页作为强证据。\n- 风险信号必须在同一页面连续两次确认;只出现一次的瞬时信号继续执行。\n- blocked 文案明确为“当前采集页请求拦截,不代表账号封禁”,风险记录增加 evidence code,方便后续判断。\n- 连续页面失败只结束 BOSS 当前轮,不写账号风险锁,其他平台可继续。\n- 旧版默认 24 小时风险锁已取消;全局兜底改为 10 分钟,BOSS 采集仍按 5–10 分钟随机。\n\n验证:392 passed,另含 16 subtests;前端生产构建通过。 |
|
新增配置页实时页数提醒:\n\n- BOSS 理论列表页 = 关键词数 × 城市数 × 每组合最大页数。\n- 在“搜索设置”和“BOSS 单日搜索页上限”两处实时显示计算结果。\n- 超过每日上限时显示黄色醒目提示,并说明执行到上限后会停止 BOSS 当前轮;未超过时显示绿色说明。\n- 智联和 51job 没有每日累计页数硬上限,仍保留各自每组合 max_pages。\n\n前端 TypeScript 与生产构建通过。用户本地每日 BOSS 搜索页上限已设为 60。 |
目标
选择性整合贡献 PR 中可用的多平台采集、岗位池体验和账号安全能力。智联与 51job 仅开放只读采集、本地评分和招呼语生成;岗位池提供安全的原平台链接,用户完成投递后可手动标记已发送,不扩大自动发送范围。
Closes #47
Closes #52
已纳入
多平台与安全边界
#55 十三个提交的处理
暂未完整纳入
验证
来源与署名
所有选择性整合提交均保留原作者或 Co-authored-by;PR #66 通过合并主线提交保留完整历史。
保持 Draft,等待 CI 与用户本地真实环境验收。