Indeed 职位搜索与数据提取
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_2cc35c71/indeed-job-search。
技能介绍
解决的问题
打开 Indeed 搜索页,看着一屏屏职位卡片,却只能一份份手动复制。职位标题、公司名、薪资经常不全;想拿到完整职位描述(JD)还得逐个点进去,遇到登录墙还要额外操作。这个技能把「复制粘贴」这件事交给自动化:给定 keyword 和 location,直接产出结构化的职位列表数据——标题、公司、薪资、福利、申请链接一应俱全,不需要自己写爬虫、不需要解析 HTML。
工作方式
技能运行在 browser-act 之上,边界非常明确:只读取页面上已经渲染给用户看的数据,不绕过任何认证或访问控制。效果等同于替你复制粘贴,而不是偷偷爬后台接口。
核心流程是一个「列表 + 详情」两段式提取:
- 先导航到
https://www.indeed.com/jobs?q={keyword}&l={location},等待页面稳定;如果命中Security Check,先过验证码再继续 - 调用
eval "$(python scripts/search-jobs.py --max-items {max_items})"拿到当前页的职位列表和各自的jobkey - 逐个调用
eval "$(python scripts/fetch-job-detail.py '{jobkey}')"拉取完整描述、福利、补充薪资与评分信息 - 最后合并两边结果:列表页提供基础字段,详情页补充
description、benefits 和 enriched salary/rating
分页走 URL 的 start 偏移参数,按 start=0/10/20/30 递增,直到 search-jobs.py 返回的结果数少于预期或标记 error: true 时停止。第 2 页起需要登录:未登录会被重定向到 secure.indeed.com/auth。判断登录态很简单——页面上有退出入口或头像菜单就是已登录;只有 Sign in/Register 入口就是未登录。
国家维度通过域名变体实现,内置 20 多个常见站点映射(如 uk.indeed.com、de.indeed.com、jp.indeed.com),其他国家按 {country-code-lowercase}.indeed.com 拼接即可。
批量执行时有几条工程经验值得注意:详情抓取之间留 2–5 秒间隔,避免触发反爬;单会话内串行循环,要提高吞吐就开多个独立指纹的会话分摊任务;写批量脚本前先拿 1–2 个样本测试;结果逐条落盘,失败时从断点续跑而不是从头再来。
适用边界与注意点
- 未登录状态下只能拿到第一页,大约 24 条结果
fetch-job-detail.py必须在搜索结果页上下文里执行(同源 Cookie),抓取列表和抓详情之间不能导航离开- 部分字段(salary、jobType、benefits)在雇主没有填写时会是
null,这属于数据源本身的问题 - Indeed 首次访问可能弹验证码,流程能处理但需要等页面稳定
- 跑之前建议先读一下经验记忆文件,里面记录了历史执行中失效的策略和踩过的坑
使用场景
- 猎头按关键词和地点批量收集可投递职位清单,带薪资与完整 JD,整理成内部推荐池表格
- 求职平台运营把 Indeed 上某类岗位的 JD、公司、福利和申请链接抓下来,填充到自家职位库
- 数据分析人员对比同一职位在不同国家 Indeed 域名上的薪资差异,产出多国薪资对比表
- NLP 工程师需要批量获取带薪资、福利字段的职位描述文本,作为 JD 文本挖掘的标注语料
适合人员
- 猎头或招聘顾问:每周要按关键词和地点搜集带薪资的可投递职位清单,建内部推荐池
- 求职平台的内容运营:需要把 Indeed 上的职位信息搬运到自家站点,要求带完整描述和申请链接
- 做劳动力市场分析的数据分析师:需要从 Indeed 抓取结构化职位数据,做薪资或岗位趋势分析
- 需要结构化职位语料的 NLP 工程师:想批量获取带薪资、福利字段的 JD 文本用于模型训练或研究