一、案例背景与采集目标
招聘信息是就业市场最直接的体温计。一个专业值不值钱、哪个城市机会多、同一岗位在不同城市的薪资差多少,都能从公开的招聘信息里看出眉目。对经济统计、大数据方向的同学来说,这是一份和自己前途直接相关的数据。
这一篇的示范站点是 国家大学生就业服务平台 · 职位信息,入口网址 https://job.ncss.cn/student/jobs/index.html。它是教育部学生服务与素质发展中心运营的毕业生就业平台,面向高校毕业生免费开放,职位列表公开、无需登录、无验证码:岗位名称、单位名称、单位性质、单位规模、工作城市、学历要求、专业要求、招聘人数、薪资与发布时间,在列表页上一眼可见。
1.1 为什么挑这个站点
- 官方平台、公开可访问:由教育部学生服务与素质发展中心运营,职位面向毕业生公开发布,打开列表就能看全,采集它维护成本低、伦理争议小,适合作为生活服务模块的开篇;
- 字段规整、格式统一:每条职位固定给出岗位名称、单位名称、单位性质、单位规模、工作城市、学历要求、专业要求、招聘人数、薪资、发布时间与福利标签,比多数商业招聘站的页面干净得多;
- 它代表了一大类站点——国家级就业平台、各高校就业网、各地人才市场的岗位栏结构高度相似,学一套能迁移到一大片;
- 规模适中、可以翻页:职位列表按发布时间倒序持续更新,能按行业、地区、学历、薪资筛选,正好够练「批量翻页 + 文本清洗」,又不会一上手就撞登录墙;
- 与本校渠道互补:本校的「校园就业信息网」以本地企业为主、可直接进校宣讲,两者一个看全国、一个看本地。
1.2 这个案例要拿到什么
- 职位列表里的岗位清单,一条岗位一行;
- 每条记录的岗位名称、单位名称、单位性质、单位规模、工作城市;
- 把学历要求、专业要求整理成便于筛选的标签;
- 把薪资文案「5-20K/月」「6-8K/月」「面议」清洗成月薪下限与月薪上限;
- 记下发布时间与招聘人数,按时间倒序看最新的岗位;
- 对重复出现的岗位去重,再按城市、学历与薪资做分组统计。
1.3 站点结构速查(动手前先认识它)
| 部位 | 长什么样 | 我们从中取什么 |
|---|---|---|
职位列表页 | 一行一条职位,按发布时间倒序排列,可以分页继续往后翻 | 岗位名称、单位名称、工作城市、薪资文案、发布时间 |
岗位名后面的条件 | 紧跟着学历要求、薪资与专业要求(如「本科及以上」「6-8K/月」「机械类 电气类」) | 学历要求、薪资文案、专业要求 |
单位信息段 | 单位名称后面跟着单位性质与单位规模(如「民营企业 | 5000以上」) | 单位名称、单位性质、单位规模 |
招聘信息段 | 「招聘 50 人」与发布时间、来源平台,末尾还挂着一串福利项 | 招聘人数、发布时间、福利标签 |
筛选栏 | 按行业、公司性质、地区、学历要求、薪资区间筛选 | 只用来定位目标岗位,不作为数据来源 |
1.4 这个案例的难点在哪
| 难点 | 具体表现 | 对策 |
|---|---|---|
| 薪资写法不统一 | 「5-20K/月」「6-8K/月」「面议」并存,区间跨度还差得远 | 先把原始写法去重列出来,再定解析规则;面议单独标,不要取平均值 |
| 专业要求是一长串 | 「机械类 电气类 材料类 车辆类 自动化类」按空格排开 | 统一用「、」连接,另拆标签列便于统计 |
| 城市写法不统一 | 有的写城市「上海」,有的写省份「山东」,也有「全国」 | 照录原文,另设一列归到城市或省份;「全国」留空并备注 |
| 单位名称长、后缀多 | 「中国软件与技术服务股份有限公司」「人本股份有限公司」并存 | 保留页面原文,另建规范化列,不强行合并 |
| 岗位会反复发布 | 同一家单位的同一岗位刷新后再次出现 | 按「单位名称 + 岗位名称 + 工作城市」联合去重 |
robots.txt 与服务条款;招聘负责人的姓名、电话、邮箱、微信一律不采。这几条是红线,后面每个案例都会重复检查。目标站点与交付产物
下表是本篇用到的真实站点。绿色是课堂可稳定复现的示范站点;橙色是延伸站点,多数有登录墙或风控,课堂上只讲结构、原理与合规边界,不教绕过。
| 项目 | 内容 |
|---|---|
| 示范站点 | 国家大学生就业服务平台 · 职位信息 https://job.ncss.cn/student/jobs/index.html 教育部学生服务与素质发展中心运营,职位列表公开、无需登录、无验证码;岗位名称、学历、薪资、城市、专业、单位名称与性质、单位规模、招聘人数、发布时间、福利标签都在列表页上一眼可见(实测当日职位总数约 95 万条,列表按发布时间倒序、可分页) |
| 延伸站点 |
|
| 交付产物 |
|
| 难度 | ★★☆ 中 |
| 合规提示 | 只采集公开展示的岗位信息,严禁采集招聘联系人姓名、电话、邮箱、微信等个人信息;不得用于推销或其他骚扰用途。 |
二、数据源与字段设计
目标站点:国家大学生就业服务平台 · 职位信息,网址 https://job.ncss.cn/student/jobs/index.html。
| 项目 | 内容 |
|---|---|
站点名称 | 国家大学生就业服务平台 · 职位信息(教育部学生服务与素质发展中心) |
入口网址 | https://job.ncss.cn/student/jobs/index.html(首页 https://www.ncss.cn/ 顶部导航「职位信息」也可到达) |
页面形态与接口 | 无需登录、无验证码;职位列表按页返回,岗位信息与单位信息都直接写在列表页上,不用再点进详情页 |
实际规模 | 职位按发布时间倒序持续更新,可按行业、公司性质、地区、学历要求与薪资区间筛选,翻页可练批量采集 |
延伸站点 | 国聘网 https://www.iguopin.com/job、校园就业信息网 https://jyw.gcut.edu.cn/、实习僧 https://www.shixiseng.com/interns;牛客网 https://www.nowcoder.com/jobs/school 现已需登录才能看全职位列表,课堂上只讲字段结构与合规边界,不教绕过 |
2.1 先定字段,再动手
很多人一上来就说「帮我把这个招聘网站的岗位爬下来」,结果拿回一张字段乱七八糟的表。正确顺序是:先把要哪些列想清楚、列成清单,再交给 WorkBuddy。
2.2 完整字段表(13 个字段)
下表就是本案例的验收标准。前 10 个来自页面原始数据,后 3 个是清洗与派生出来的分析字段。
| 字段名 | 字段含义 | 示例值 | 口径与备注 |
|---|---|---|---|
岗位名称 | 招聘岗位标题 | 现场工程师(毕业三年内) | 照录岗位名,不删括注、不改写 |
单位名称 | 用人单位全称 | 人本股份有限公司 | 保留页面原文,另建规范化列,不强行合并简称与全称 |
单位性质 | 单位所有制类型 | 民营企业 | 照页面档位,归为 国有企业 / 民营企业 / 股份制企业 / 事业单位 等有限几档 |
单位规模 | 单位人员规模 | 5000以上 | 照录页面写法(如 1-49 人 / 100-499 人 / 5000 以上) |
工作城市 | 工作所在地 | 上海 | 照录页面写法;有的写省份(如「山东」),「全国」留空并备注 |
学历要求 | 学历门槛 | 本科及以上 | 统一成 不限 / 大专 / 本科及以上 / 硕士 / 博士 五档 |
专业要求 | 岗位面向的专业 | 机械类、电气类、材料类 | 页面用空格分隔,统一用「、」连接,另拆标签列 |
招聘人数 | 计划招聘人数 | 50 | 从「招聘 50 人」抽出数字;写成「招聘人数不限」的记为空值并备注,不填 0 |
薪资文案 | 页面上的薪资写法 | 6-8K/月 | 原样保留,作为清洗依据 |
发布时间 | 岗位发布或刷新日期 | 2026-10-15 | 列表按发布时间倒序排列,时效性强,必须有此列 |
月薪下限 | 清洗后的月薪下限(元) | 6000 | 「6-8K/月」→ 下限 6000;「K」按 1000 元计 |
月薪上限 | 清洗后的月薪上限(元) | 8000 | 「6-8K/月」→ 上限 8000,不要用区间平均值代替 |
福利标签 | 单位给出的福利项 | 五险一金、带薪年假、岗位晋升 | 页面用「,」分隔,统一成「、」连接,便于做词频统计 |
2.3 薪资字段的解析规则(关键)
薪资是最容易出错的一列,必须在提示词里把规则写死。下面是按这个平台的真实写法定下的解析口径:
- 「6-8K/月」:下限 6000、上限 8000,「K」按 1000 元计,「/月」表示月薪;
- 「6-9K/月」:下限 6000、上限 9000,同一种写法换了个区间,规则要能通用;
- 「5-20K/月」:同样是区间写法,下限 5000、上限 20000;区间跨度大时不要用平均值代替,否则高薪岗位会被拉平;
- 「元/天」「元/小时」:实习、兼职岗常见,单独标注折算口径(如按月 21.75 个工作日折算),不与正式月薪混在一起算平均;
- 「面议」这类没有数字的写法:两项数值列一律留空,另在薪资备注里写「面议」,不要填 0——填 0 会把整列的平均值拉垮;
- 别的平台还会遇到什么:商业招聘站上常见「1.5-3 万」「8 千-1.2 万」「·14 薪」——「万」按 10000、「千」按 1000 换算;「·N 薪」表示一年发 N 个月工资,折算年薪时按「月薪中值 × 月数」并写明口径。
课程思政|数据安全与法治素养 · 岗位信息可以采,个人信息不能碰
招聘页面上常常能看到招聘负责人的姓名和电话,但这恰恰是最不该采的部分。个人信息受法律保护,采了、存了、传了,都可能构成侵权。数据工作者要养成的第一反应是:这一列我该不该要?答案是「不该」时,就别采。
AI 助手小贴士|薪资解析规则很难一次说全,先让 AI 把页面上的薪资写法「样本」去重列出来,你再逐条给规则,会高效很多。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请先把职位列表里出现过的薪资文案原样列出来(去重后,按出现次数排序),先不要解析,我来逐条给解析规则。
三、零代码操作步骤
工具与技能|先看清三个角色,再动手
本篇全程零代码:你把要求说清楚,AI 去执行,你负责验收。三个角色分工如下——浏览器技能指的是腾讯开源的 BrowserSkill,它能让 AI 直接操作你电脑上真实的浏览器(可复用已经登录的状态),自己开一个独立窗口干活,不打扰你正在看的网页;遇到验证码、登录或确认弹窗,它会停下来交给你本人处理。
| 角色 | 负责什么 | 在本案例里具体做什么 |
|---|---|---|
| 你 | 确认字段清单、验收结果、清洗与合规把关 | 盯字段清单、核对结果、处理异常(如验证码) |
| WorkBuddy | 接中文指令:探字段 → 批量采 → 清洗 → 导出交付物 | 拆解本篇的采集任务并跑完全量、产出交付物 |
| 浏览器技能 BrowserSkill | 以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理 | 打开校招岗位列表,确认岗位卡片字段与翻页 |
五步操作主线(全课程统一,每一篇都按这个顺序推进):
- 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
- 现场踩点(浏览器技能 BrowserSkill):打开
https://www.nowcoder.com/jobs/school,确认岗位卡片上能拿到哪些字段、有没有翻页。 - 小样试采(WorkBuddy):先采第一页 20 条,看字段齐不齐、薪资文案有没有被截断。
- 核对与清洗:① 薪资写法是不是都列出来确认了解析规则;② 城市列为空的记录有没有标注;③ 月薪下限、上限、折算年薪三列的口径写清了没有。
- 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
用浏览器技能 BrowserSkill 打开 https://job.ncss.cn/student/jobs/index.html(国家大学生就业服务平台 · 职位信息),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。下面是在 WorkBuddy 里完成本案例的完整流程。全程不需要你写一行代码,但每一步都要动脑核对。
- 新建对话,粘贴下一节的「采集任务提示词」,网址就用
https://job.ncss.cn/student/jobs/index.html。 - 先采第一页做验证。看字段是不是都取到了,薪资文案有没有被截断,「招聘 50 人」这类写法有没有抽出数字。
- 先看薪资样本。让 AI 把去重后的薪资写法列出来,你据此确认或补充解析规则。
- 执行薪资清洗。要求生成月薪下限、月薪上限两列,并说明换算口径;「面议」一律留空。
- 拆专业与福利标签。说「把专业要求和福利标签里的内容拆成独立的标签列,重复的标签去重」。
- 继续翻页并联合去重。说「继续往后翻几页,最后按单位名称、岗位名称、工作城市三列联合去重,保留第一次出现的记录」。
- 做分组统计。说「按工作城市统计岗位数量并降序,再按薪资区间做一个分布统计」。
- 导出并归档。说「导出为 Excel,文件名
jobs_20261008.xlsx」。
四、提示词模板与追问技巧
下面这段可以直接复制。注意三个要点:网址写全、字段按编号列清、把薪资解析规则和「不采个人信息」交代死。
请帮我采集国家大学生就业服务平台的职位列表,做成一张岗位清单表。
【目标站点】https://job.ncss.cn/student/jobs/index.html
这是教育部学生服务与素质发展中心的毕业生就业平台,职位列表公开、无需登录。
列表按发布时间倒序排列,一行一条职位,可以分页继续往后翻;
每条职位上有岗位名称、单位名称、单位性质、单位规模、工作城市、
学历要求、专业要求、招聘人数、薪资、发布时间与福利标签。
【采集范围】先只采第 1 页做验证,我确认后再采前 5 页。
【需要字段】按这个顺序:
1. 岗位名称(照录,不删括注、不改写)
2. 单位名称(保留页面原文)
3. 单位性质(国有企业 / 民营企业 / 股份制企业 / 事业单位 等,照页面档位)
4. 单位规模(照录,如 1-49 人 / 5000 以上)
5. 工作城市(照录;「全国」留空并备注)
6. 学历要求(统一成 不限 / 大专 / 本科及以上 / 硕士 / 博士)
7. 专业要求(页面用空格分隔,统一用「、」连接)
8. 招聘人数(从「招聘 50 人」抽数字;「若干」留空)
9. 薪资文案(照录,如 5-20K/月、6-8K/月、面议)
10. 发布时间(格式 2026-10-15)
11. 月薪下限(元,纯数字)
12. 月薪上限(元,纯数字)
13. 福利标签(页面用「,」分隔,统一成「、」连接)
【薪资解析规则】
- 「6-8K/月」表示下限 6000、上限 8000,「K」按 1000 元计
- 「5-20K/月」同理:下限 5000、上限 20000,不要用平均值代替区间
- 「面议」:两项数值列一律留空并在备注里写「面议」,不要填 0
- 「元/天」「元/小时」这类日薪、时薪单独备注折算口径,不混进月薪平均
【合规要求】
- 只采列表页公开展示的字段;联系人、电话、邮箱、微信一律不要采集
- 请求之间间隔 2 秒以上,不要并发
- 按「单位名称 + 岗位名称 + 工作城市」三列联合去重,保留第一次出现的记录
- 结果导出为 jobs_20261008.xlsx
4.1 三条常用追问指令
追问一(薪资没算对):
「5-20K/月」这条的下限、上限不对,请按「K 按 1000 元」重算,
并把所有「面议」的记录两项数值留空,不要填 0。
追问二(去重):
请按「单位名称 + 岗位名称 + 工作城市」三列联合去重,
重复的只保留第一次出现的那条,并告诉我删掉了几条。
追问三(分组统计):
请按工作城市统计岗位数量并降序排列;再按 0-6K、6-9K、9-15K、15K 以上
四个区间统计岗位分布,用月薪下限来分档。
AI 助手小贴士|统计城市分布时,同一家单位可能在不同城市都有岗位,这属于正常现象,不要误当成重复项删掉。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请帮我确认:按单位+岗位+城市去重后,有没有把同一单位在不同城市的岗位误删?请抽查两家单位核对。
五、结果核对、清洗与保存
下面是采集到的结果样例(节选,2026-10-15 的真实职位数据,薪资已按 2.3 的规则数值化):
| 岗位名称 | 单位名称 | 单位性质 | 工作城市 | 学历要求 | 专业要求 | 薪资文案 | 月薪下限 | 月薪上限 |
|---|---|---|---|---|---|---|---|---|
| 商务助理 | 山东纳蒂尔智能科技有限公司 | 股份制企业 | 山东 | 本科及以上 | 工商管理相关专业、自动化相关专业 | 3-8K/月 | 3000 | 8000 |
| 财务 | 山东纳蒂尔智能科技有限公司 | 股份制企业 | 山东 | 本科及以上 | 财务、会计、审计 | 5-20K/月 | 5000 | 20000 |
| 现场工程师(毕业三年内) | 人本股份有限公司 | 民营企业 | 上海 | 本科及以上 | 机械类、电气类、材料类、车辆类、自动化类 | 6-8K/月 | 6000 | 8000 |
| 质量工程师(机械、材料、电气、车辆、自动化、仪器仪表等工科专业) | 人本股份有限公司 | 民营企业 | 上海 | 本科及以上 | 机械类、电气类、材料类、车辆类、自动化类 | 6-9K/月 | 6000 | 9000 |
| 中国银行股份有限公司 2027 年全球校园招聘公告 | 中国银行股份有限公司 | 国有企业 | 北京 | 本科及以上 | 专业不限 | 5-15K/月 | 5000 | 15000 |
注意这几条里的两个细节:工作城市写的是「山东」而不是某个市,所以统计城市分布时要先把省份与城市分开处理;专业要求写「专业不限」的岗位,标签列要留空并备注,不能当成「缺失值」删掉——它本身就是一个有意义的取值。
5.1 五步清洗,一句话一条
① 去重:
按「单位名称 + 岗位名称 + 工作城市」三列联合去重,保留第一次出现的记录。
② 薪资兜底:
逐条检查薪资文案与两个数值列是否匹配;「面议」的必须为空,
数值列出现 0 的记录单独列出来给我核对。
③ 档位统一:
把学历要求统一成 不限 / 大专 / 本科及以上 / 硕士 / 博士 五档;
把单位性质归成 国有企业 / 民营企业 / 股份制企业 / 事业单位 等有限几档。
④ 缺失标注:
薪资为面议的、单位为「若干」人、城市写「全国」的,
各自统计条数与占比,单独写进质量说明。
⑤ 分组统计:
按工作城市统计岗位数并降序;按四个薪资区间统计岗位分布。
5.2 保存与归档
jobs_20261008.xlsx 原始合并表(保留,不覆盖)
jobs_20261008_clean.xlsx 清洗版(去重 + 薪资数值化 + 档位统一)
jobs_stats_20261008.xlsx 统计附录:城市分布表、薪资区间分布表
jobs_20261008_log.txt 日志:页数、原始条数、去重后条数
AI 助手小贴士|城市分布做完后,可以让 AI 顺手算一个「城市 × 薪资区间」的交叉表,一眼就能看出哪个城市高薪岗位更集中。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请再做一个「城市 × 薪资区间」的交叉统计表,行是城市、列是薪资区间,格子里填岗位数量。
课程思政|工匠精神与严谨求实 · 把口径写进规则,而不是藏在脑子里
薪资怎么算、面议怎么处理、学历怎么分档——这些如果只在你脑子里,换个人来做结果就完全不一样。把它们写成一句话、写进提示词,数据才能被复核、被复现。严谨的职业习惯,就是让每一步都有据可循。
六、常见问题与合规红线
6.1 这个站点上最容易踩的五个坑
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| 「面议」被算成了 0 | AI 把「没有数字」当成了数字 0;而页面上「面议」是一个真实的薪资档位 | 要求面议的岗位两项数值列留空并在备注里写明,单独核对,绝不填 0 |
| 「招聘人数不限」被填成 0 | 只认「招聘 N 人」这一种写法,遇到「不限」就顺手填了 0 | 先看一遍这一列的原始写法,非数字的一律留空并备注 |
| 省份与城市混在一列 | 有的写「山东」,有的写「上海」,有的写「全国」 | 照录原文,另设一列判定是省份还是城市;「全国」留空并备注 |
| 去重后条数掉了一大半 | 同一岗位反复刷新、一家单位挂多条岗位,或去重列选得太宽 | 按「单位名称 + 岗位名称 + 工作城市」联合去重,并确认没把不同城市的岗位误删 |
| 岗位名带了长长的括注 | 如「质量工程师(机械、材料、电气、车辆、自动化、仪器仪表等工科专业)」 | 照录不删;另设一列做规范化简称,不要为了好看把原文改短 |
6.2 三条合规红线(每个案例都要过一遍)
- 不采个人信息。只采岗位卡片公开展示的字段,招聘负责人的电话、姓名、邮箱、微信一律不采、不存、不导出。
- 控制频率与范围。只采与自己分析目的相关的那几页,不要整站抓取,不要在高峰时段反复请求。
- 不用于商业用途。结果仅用于课程学习与统计分析,不对外转售、不二次发布原始数据。
课程思政|诚信与职业操守 · 数据不能为了好看而修饰
清洗薪资时,最诱人的错误就是把「面议」填成 0 或随手填个平均数,因为这样表格「看着完整」。但数据工作的操守恰恰在于:宁可留下空白并说明,也不为了让结果好看而编造。一个诚实的空值,远胜一个漂亮的假数。
七、随堂自测(10 题)
点击选项即可判分,答错的题会立刻显示解析。
1采集招聘信息时,下面哪一类字段是明确不应该采集的?
- A. 岗位名称
- B. 工作城市
- C. 招聘负责人的手机号
- D. 学历要求
2薪资文案是「6-9K」,清洗后月薪下限和上限应该是?
- A. 6000 和 9000
- B. 6 和 9
- C. 600 和 900
- D. 无法确定,只能留空
3「面议」这一条,三项薪资数值列应该怎么填?
- A. 全部填 0
- B. 全部留空,并在备注里写「面议」
- C. 填该岗位的平均薪资
- D. 删掉这条记录
4「6-9K·13薪」的折算年薪,本案例采用的口径是?
- A. 只取下限 6000 × 12
- B. 取上限 9000 × 12
- C. 只取(6000+9000)之和
- D. 取下限与上限的中值 7500 × 13
5翻页后发现同一岗位重复出现,最可靠的去重依据是?
- A. 公司名称 + 岗位名称 + 工作城市 三列联合
- B. 薪资相同
- C. 岗位名称相同
- D. 页面上出现的顺序
6把「应届毕业生」「1-3 年」这类经验要求统一处理,最好的做法是?
- A. 删掉这一列
- B. 换算成具体天数
- C. 统一成有限几个档位(如 应届 / 1-3 年 / 3-5 年)
- D. 保留原文不做处理
7采集校招岗位时,符合本课要求的做法是?
- A. 把平台上的岗位库一次性全抓下来
- B. 只采与分析目的相关的几页,控制频率
- C. 采集招聘负责人的电话用于课程分析
- D. 把采集到的数据转卖出去
8统计城市分布时,同一家公司在两个城市都有岗位,应该?
- A. 当成重复数据删掉一个
- B. 只保留总部所在城市那个
- C. 合并成一条
- D. 两个都保留,因为这是两条不同的招聘
9为什么建议把「原始条数」和「去重后条数」都记进日志?
- A. 便于判断重复发布的程度,提醒后续统计注意
- B. 日志看起来更长
- C. 方便给老师看
- D. 这是网站的硬性要求
10采集过程中突然持续返回错误或要求验证码,正确的做法是?
- A. 换用更快的采集方式硬冲
- B. 记录情况并停止,加大间隔或直接换数据源
- C. 反复重试直到成功
- D. 换成别人的账号继续