---
title: "W07 上机练习一：翻页采集招聘岗位"
---

# 🧪 练习一：翻页采集招聘岗位

[上机导航](https://ai.lingnan.top/materials/2026-autumn/w07/lab-manual) · [常见问题](https://ai.lingnan.top/materials/2026-autumn/w07/faq) · [工具说明总览](https://ai.lingnan.top/materials/2026-autumn/w07/tools-index)

开始之前先按[上机导航](https://ai.lingnan.top/materials/2026-autumn/w07/lab-manual)“开始之前”一节接好工具。

## 任务

在[国家大学生就业服务平台](https://www.ncss.cn/student/jobs/index.html)的职位信息页，搜关键词“金融”，地区保持“全国”，采集前 3 页共 30 条岗位，存成 CSV；再让智能体写一段脚本，用程序数行数、查重复，不信它口头说的“已全部采集”。

这个网站不用登录，月薪、学历、单位都是明文。它有三个地方要留心，练习就是冲着这三点设计的：

- **列表要等网页里的程序加载出来**。直接读网页源码，岗位列表是空的，只读网页正文的工具拿不到数据，要用浏览器工具。
- **翻页时网址不变**。点“>”后列表换了，地址栏还是同一个网址，所以不能靠“打开第 2 页的网址”翻页，要点按钮。
- **分页栏的页数不能信**。不管搜出多少条，分页栏都画 `1 2 3 4 5 >`；搜出 0 条时也一样。判断采完了，看这一页是不是不满 10 条。
- **不登录只能看前 5 页**。点第 6 页会弹出“请登录后查看”。练习只采前 3 页。

### 🎬 讲解录播

<video controls preload="metadata" playsinline style="display:block;width:100%;aspect-ratio:16/9;background:#000;border-radius:10px" src="/course-materials/2026-autumn/w07/lab-ex1.mp4"></video>

录播 6 分 6 秒，带讲解和字幕，播放器右下角可以全屏。

## 准备

材料包 `01_岗位采集/`：

| 文件 | 内容 |
| --- | --- |
| `采集要求.md` | 要采哪些字段、月薪和招聘人数怎么拆、用什么判断重复 |
| `备用数据/jobs_备用_20261019.csv` | 课程组 2026-10-19 22:50 采的 30 条。网站打不开、工具实在接不上时，用它做后面的核验步骤 |

## 第 0 步：建项目

**做什么**

1. 把材料包里的 `01_岗位采集` 文件夹整个拷到你放作业的位置，改名 `岗位采集`。
2. **Claude Code**：VS Code 打开 `岗位采集` 文件夹，新建终端，输入 `claude` 回车，信任这个文件夹。**WorkBuddy**：新建一个任务，工作目录选 `岗位采集`。

**做对了会看到**：文件栏里有 `采集要求.md` 和 `备用数据/`；Claude Code 欢迎框第三行是这个文件夹的路径，WorkBuddy 任务的工作目录是它。

## 第 1 步：自己先看一眼网页

**做什么**：用你自己的浏览器打开 <https://www.ncss.cn/student/jobs/index.html>，关键词框输入“金融”，点“搜索”。翻到第 2 页，看看地址栏有没有变；再看分页栏和每条岗位显示了哪些信息。

**做对了会看到**：

- 每页 10 条。每条显示职位名称（蓝色链接）、学历要求和月薪（如“本科及以上 | 6-8K/月”）、地区和专业要求、单位名称、单位性质、规模和招聘人数（如“民营企业 | 1-49人 | 招聘3人”），右侧有一个时间（如“2026-10-19 17:04”）。
- 翻到第 2 页，地址栏还是 `https://www.ncss.cn/student/jobs/index.html`，没有页码。
- 分页栏是 `1 2 3 4 5 >`，后面一个跳页输入框和“确定”，没有“共多少条”。
- 列表右上方的“平台今日职位总数”是整个平台的数，搜“金融”后不变，不是搜索结果数。

列表上的那个时间是**更新时间**，不是发布日期，表头按“更新时间”写。

## 第 2 步：让智能体用浏览器采集 3 页

**做什么**：把下面这段复制、粘贴进输入框，回车。要整段粘贴，不要逐行手打：在终端里手打时，每按一次回车就会把那一行单独发出去。

```txt
这个项目要从国家大学生就业服务平台采集招聘岗位。先读 采集要求.md，再用浏览器工具做，不要凭记忆回答：
1. 打开 https://www.ncss.cn/student/jobs/index.html ，在关键词框输入“金融”，地区保持“全国”，点“搜索”。
2. 逐页读取前 3 页：每页先把 10 条逐条列给我看，再写入 岗位数据/jobs.csv。读完一页点分页栏的“>”翻页，等列表第一条职位名称变了再读。职位ID 在每个职位名称的链接地址里，读页面结构时能看到。
3. 字段和拆法按 采集要求.md。
4. 采完写 岗位数据/采集记录.md：采集时间（到分钟）、网址、搜索条件、每页条数。
不要登录、不要投递、不要收藏。
```

**做对了会看到**：

- 先有一次 `browser_navigate` 打开职位页，再有填关键词、点“搜索”的调用；之后每翻一页是一次 `browser_click`（点“>”），接一次 `browser_snapshot` 读这一页。弹出的 Chrome 窗口一直停在页面顶部，看不到下面的列表在变：这个网站搜索、翻页后会滚回顶部，它读的是页面结构，不靠滚动去看。翻没翻页，看终端里的调用记录和它每页列出的 10 条。
- 每页它先列出 10 条，再写文件。
- `岗位数据/jobs.csv` 有 30 行数据，第一行是表头。试采时第 1 页第一条是这样的（你采到的会不同）：

```txt
页码,职位名称,单位,地区,学历要求,月薪原文,月薪下限（千元）,月薪上限（千元）,招聘人数原文,招聘人数,单位性质,更新时间,职位ID
1,金融高管猎头顾问助理（Executive Search Researcher）,斐意特（北京）管理咨询有限公司,北京,本科及以上,6-8K/月,6,8,招聘3人,3,民营企业,2026-10-19 17:04,VDqctoKS25QhZyC6pcN3AK
```

- `岗位数据/采集记录.md` 写了采集时间和搜索条件。

如果它说“页面没有内容”或只拿到一个空框架，多半是用了只读网页正文的工具，没走浏览器。回它一句：“用浏览器工具打开并等列表加载出来再读。”

## 第 3 步：写脚本核行数

**做什么**：粘贴下面这段，回车。

```txt
写一个 Python 脚本 核验/check_jobs.py，读 岗位数据/jobs.csv，打印：
1. 总行数；每页条数
2. 按职位ID 的不重复数；按“职位名称+单位”的不重复数，并列出同名同单位出现两次以上的组
3. 月薪缺失数（含“面议”）；月薪下限大于上限的行数
4. 各单位性质的数量
运行它，把输出原样给我看。
```

**做对了会看到**：屏幕上最后一次调用是 `Bash(python 核验/check_jobs.py)` 一类的运行脚本，输出是脚本打印的，不是模型自己数的。试采时的结果：

```txt
总行数 30；每页 10、10、10
不重复职位（按职位ID）30
不重复（按职位名称+单位）28：有 2 组同名同单位，职位ID 不同
月薪缺失 0；下限大于上限 0
单位性质：国有企业 11、民营企业 7、股份制企业 7、上市公司 4、其他 1
```

按“职位名称+单位”只有 28，是因为同一家单位发了两个同名岗位，职位ID 不同，不算重复。所以判断重复要用职位ID：它不以文字显示在页面上，在职位名称的链接里，形如 `/student/jobs/VDqctoKS25QhZyC6pcN3AK/detail.html` 中间那一串。

## 第 4 步：人核 3 条

**做什么**：在 `jobs.csv` 里随便挑 3 条（最好分在不同页），回到你自己的浏览器里找到这 3 条，核对职位名称、单位、月薪、招聘人数。浏览器窗口窄时，招聘人数在每条的右侧，要往右滚一下才看得到。

**做对了会看到**：3 条都对得上；月薪下限、上限和页面上的“a-bK/月”一致。对不上的，告诉它是哪一条、页面上是什么，让它重采那一页。

岗位每天在更新。你采完过一阵再去页面找，原来第 1 页的岗位可能挤到了第 2 页，或者被新岗位顶出了前 3 页。这时按职位名称在搜索框里搜它，或者在采集记录里写明“核对时已不在前 3 页”。

## 第 5 步：看分页栏为什么不能信

**做什么**：在你自己的浏览器里，地区框点开选“广东”，关键词仍是“金融”，点“搜索”。看这一页有几条，再点分页栏的“2”。

**做对了会看到**：试采时第 1 页只有 5 条，分页栏照样是 `1 2 3 4 5 >`；点“2”后列表处显示“暂时没有查询到符合要求的职位”。如果只看分页栏，会以为有 5 页、50 条。

地区选“广州”试采时是 0 条：多数岗位的地区只登记到省一级，按城市筛会漏掉。

再把地区换回“全国”，翻到第 5 页：试采时这一页只有 1 条，前 5 页合计 41 条；点第 6 页会弹出“请登录后查看”。不登录只能看前 5 页，练习只采前 3 页，用不着登录。

## ✅ 练习一自查

- [ ] 屏幕上有浏览器工具的调用，每翻一页一次；最后的数字来自运行脚本
- [ ] `jobs.csv` 30 行，每页 10 条
- [ ] 按职位ID 不重复 30 条；按名称+单位少了的，能说出是哪几组、为什么不算重复
- [ ] 月薪拆成两列数字，“面议”留空；招聘人数“不限”留空，没有写成 0
- [ ] 你亲手回页面核过 3 条，一致
- [ ] `采集记录.md` 写了采集时间和搜索条件
- [ ] 能说出分页栏显示的页数为什么不能直接信

想一想：你和同桌搜的是同一个词，采到的 30 条为什么可能不一样？复盘时要对齐哪两项，才能比较谁采错了？
