一、案例背景与采集目标
我们从今天开始做一件很实用的事:把网页上公开的信息,整整齐齐地搬进一张表格里。这件事就叫网络数据采集。
第一个案例直接上真站点:广州城市理工学院 · 校园新闻网,网址 https://www.gcut.edu.cn/xyxw_183/list.htm。这是学校对外发布校园新闻的公开栏目,全站新闻按时间倒序排列,一页 16 条,一共 955 页,最早能追到 2006 年。
1.1 为什么第一个案例挑这个站点
- 数据是我们学校自己公开发布的,采集它零门槛、零伦理争议,适合作为整门课的起点;
- 它是国内高校与政府网站最主流的建站系统之一(webplus / 苏迪科技站群,特征就是网址里的
/xyxw_183/list.htm这种栏目编号加分页),学一套能直接套用到几百家同类站点; - 规模真实、结构规整——近千页列表、上万篇详情,既够练「批量 + 断点续跑」,又不会像电商、社交站那样一上手就撞登录墙和验证码。
1.2 这个案例要拿到什么
做完这一篇,你会得到一张 一万五千多行的校园新闻明细表,一行一条新闻,字段固定为下表那 20 个(字段表见第二节)。在此基础上顺手就能做出三个统计:逐年、逐月的发布量、署名记者的发稿量排名、浏览量 Top100 的热门稿件。
1.3 站点结构速查(动手前先认识它)
| 部位 | 长什么样 | 我们从中取什么 |
|---|---|---|
列表页 | 网址形如 /xyxw_183/list.htm、/xyxw_183/list2.htm、list3.htm … | 标题、详情页链接(网址里带归档年月日) |
列表项 | 每条新闻包在 <li class="news-list-section-item"> 里 | 该条新闻的三个字段一次取全 |
下一页 | 页脚 <a class="next" href="…"> | 判断还有没有下一页 |
总页数 | <em class="all_pages">955</em> | 告诉我们一共要翻多少页 |
详情页 | /2026/0930/c183a214619/page.htm 这种带年月日的长网址 | 正文、发布时间、浏览量、署名 |
浏览量 | 详情页上写着 10,但那是占位符 | 真实数值要单独问站点的计数接口 |
署名 | 正文开头 本网讯(记者 温苗苗) | 记者姓名 |
1.4 这个案例的难点在哪
| 难点 | 具体表现 | 对策 |
|---|---|---|
| 两级抓取 | 列表页只有标题和链接,正文在详情页 | 先从列表页把上万条链接收齐,再逐条进详情页,两级分开做 |
| 相对地址陷阱 | 详情页链接写作 /2026/0930/c183a214616/page.htm,不带域名 | 必须拼上 https://www.gcut.edu.cn 补成绝对地址,否则被判成站外链接丢掉 |
| 浏览量是假的 | 详情页 HTML 里那个 10 对每篇文章都一样 | 真实数字要带着这篇的网址去问计数接口,接口见第二节 |
| 署名格式很乱 | 全角括号、半角括号、全角冒号、两个人挤在一起,还有写成部门的 | 用一套解析规则逐类处理,并把「原文」和「解析结果」两个字段都留着 |
| 近千页要跑很久 | 955 页列表加一万多条详情,中途断网就白跑 | 要求带断点续跑:已经采过的自动跳过,中断后重跑同一条命令即可接着做 |
robots.txt 与服务条款。这三条是红线,后面每个案例都会重复检查。目标站点与交付产物
下表是本篇用到的真实站点。绿色是课堂可稳定复现的示范站点;橙色是延伸站点,多数有登录墙或风控,课堂上只讲结构、原理与合规边界,不教绕过。
| 项目 | 内容 |
|---|---|
| 示范站点 | 广州城市理工学院 · 校园新闻 https://www.gcut.edu.cn/xyxw_183/list.htm webplus 站群,纯静态分页,16 条/页,共 955 页约 1.5 万条;无反爬 |
| 延伸站点 |
|
| 交付产物 |
|
| 难度 | ★☆☆ 低 |
| 合规提示 | 校园公开新闻属学校对外宣传信息,可采集;仍应控制频率(并发 ≤16、加延时),注明数据来源与采集日期。 |
二、数据源与字段设计
目标站点:广州城市理工学院 · 校园新闻网,网址 https://www.gcut.edu.cn/xyxw_183/list.htm。
| 项目 | 内容 |
|---|---|
站点名称 | 广州城市理工学院 · 校园新闻网 |
入口网址 | https://www.gcut.edu.cn/xyxw_183/list.htm(翻页为 /xyxw_183/list2.htm …) |
站点类型 | webplus / 苏迪科技 站群,服务端渲染的静态列表页,无需登录、无验证码 |
实际规模 | 列表 955 页,新闻明细 15,268 条,覆盖 2006–2026 年 |
延伸站点 | 同一套建站系统的其他高校 / 政府网站,把栏目编号换掉就能复用同一套字段与脚本 |
2.1 先定字段,再动手
很多人一上来就说「帮我把这个网站爬下来」,结果拿回一张字段乱七八糟的表。正确顺序是:先把要哪些列想清楚、列成清单,再交给 WorkBuddy。
2.2 完整字段表(20 个字段)
下表就是本案例的验收标准。其中前 6 个来自列表页与详情页原始数据,其余是清洗阶段派生出来的分析字段——派生字段看着多,其实都是「日期拆开、署名拆开」这两种操作的产物。
| 字段名 | 字段含义 | 示例值 | 口径与备注 |
|---|---|---|---|
序号 | 按发布时间倒序的编号 | 1 | 采集后统一重排,保证可追溯 |
标题 | 新闻标题原文 | 我校举办2026年“科技学术季——实验室开放日”活动 | 取自列表页 <a title>,不要改写、不要截断 |
详情页地址 | 详情页完整网址 | https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm | 相对地址必须补成绝对地址 |
链接类型 | 站内 / 微信 / 其他 | 站内 | 区分本校站点稿与跳转微信公众号的转发稿 |
网址归档日期 | 详情页网址里的年月日 | 2026-10-14 | 取自网址 /2026/1014/ 这一段,可能比发布时间早 1 天 |
发布时间 | 详情页公布时间 | 2026-10-15 | article-time,与网址归档日期可能差 1 天 |
发布日 | 分析用基准日期 | 2026-10-15 | 取发布时间,缺失时回退网址归档日期 |
发布年份 | 由发布日派生 | 2026 | 年度统计用 |
发布月份 | 由发布日派生 | 10 | 月度统计用 |
年月 | 由发布日派生 | 2026-10 | 做透视表用 |
星期 | 由发布日派生 | 周四 | 观察校园新闻的发布节律 |
浏览量 | 真实阅读量 | 69 | 走计数接口取值;详情页上的 10 是占位符,不可信 |
是否有署名 | 正文有无记者署名 | 是 | 依据是否匹配到「本网讯(记者…)」 |
署名原文 | 括号内原文 | 记者 温苗苗 | 留着供人工复核解析是否正确 |
记者姓名 | 解析出的姓名 | 温苗苗 | 多人用「、」连接 |
署名人数 | 一篇稿件的署名人数 | 1 | 多人合作稿计为 2 人及以上 |
首位署名 | 署名里的第一位 | 温苗苗 | 做发稿量排名时以首位为准 |
标题字数 | 标题去掉空格后的字数 | 24 | 过短的标题多为通知类简讯 |
日期差 | 发布时间 − 网址归档日期 | 1 | 用来验证两个日期口径的差异,正常为 0 或 1 天 |
采集日期 | 本次采集的执行日期 | 2026-10-08 | 审计字段,便于多次采集合并 |
2.3 三个必须写死的口径
- 浏览量要走接口,不能抄页面。详情页 HTML 里那个
10对每一篇都一样,真实数字必须带着这篇的网址去问计数接口(接口细节见 《案例02》 第三节)。口径不写清,AI 很可能直接把 10 抄进表里。 - 日期有两个,要说清用哪个。列表页上显示的时间(
news-list-section-item-time)与详情页的发布时间(article-time)其实是一致的,容易让人误以为只有一个日期;真正可能差一天的是网址里的归档日期——详情页网址形如/2026/1014/c183a214802/page.htm,中间那段1014未必等于页面上的发布时间。本案例统一以详情页发布时间为分析基准,同时把网址归档日期也保留、再算一个「日期差」字段做校验。 - 「转发稿」要单独标出来。校园网里有少量新闻其实是跳转到微信公众号的转发稿,这类链接点开取不到正文与浏览量,必须用「链接类型」字段标成「微信」,否则统计时会把它们当成「浏览量缺失」的坏数据。
AI 助手小贴士|把「需求说清楚」是零代码采集的核心技能。字段名、条数、格式这三样说得越具体,AI 一次做对的概率越高。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:我要采集一个校园新闻列表,请先告诉我:为了让采集结果准确,我需要向你提供哪些信息?
课程思政|数据安全与法治素养 · 先看规则,再动手
采集任何网站之前先读它的 robots.txt 与用户协议,这不是「多此一举」,而是每个数据工作者的第一课。技术在手里,边界在心里——只采公开信息、不碰个人隐私、不越授权范围,才能既做成事又站得住。
三、零代码操作步骤
工具与技能|先看清三个角色,再动手
本篇全程零代码:你把要求说清楚,AI 去执行,你负责验收。三个角色分工如下——浏览器技能指的是腾讯开源的 BrowserSkill,它能让 AI 直接操作你电脑上真实的浏览器(可复用已经登录的状态),自己开一个独立窗口干活,不打扰你正在看的网页;遇到验证码、登录或确认弹窗,它会停下来交给你本人处理。
| 角色 | 负责什么 | 在本案例里具体做什么 |
|---|---|---|
| 你 | 确认字段清单、验收结果、清洗与合规把关 | 盯字段清单、核对结果、处理异常(如验证码) |
| WorkBuddy | 接中文指令:探字段 → 批量采 → 清洗 → 导出交付物 | 拆解本篇的采集任务并跑完全量、产出交付物 |
| 浏览器技能 BrowserSkill | 以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理 | 打开校园新闻列表页确认「16 条/页 + 翻页按钮 + 总页数」,再逐条打开上万篇详情页取正文 |
五步操作主线(全课程统一,每一篇都按这个顺序推进):
- 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
- 现场踩点(浏览器技能 BrowserSkill):用浏览器技能打开
https://www.gcut.edu.cn/xyxw_183/list.htm,确认三件事:每条新闻是不是包在li.news-list-section-item里、页脚有没有指向下一页、总页数写在哪里(em.all_pages里那个 955)。 - 小样试采(WorkBuddy):先只采前 3 页列表,以及这 3 页里的详情页。十分钟内验证 20 个字段都取得到,而不是等全量跑完才发现字段错了。
- 核对与清洗:① 详情页地址是不是完整的 https 绝对地址;② 浏览量是不是每篇都不同(整列都是 10 就是抄了页面上的占位符);③ 署名原文与记者姓名两列对不对得上。
- 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
用浏览器技能 BrowserSkill 打开 https://www.gcut.edu.cn/xyxw_183/list.htm(广州城市理工学院 · 校园新闻),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。下面是在 WorkBuddy 里完成本案例的完整流程。全程不需要你写一行代码,但每一步都要动脑核对。
- 打开 WorkBuddy,新建一个对话,粘贴下一节的「采集任务提示词」(网址就用
https://www.gcut.edu.cn/xyxw_183/list.htm)。 - 先采 3 页试试水。说「先只采前 3 页列表,并只进这 3 页里的详情页,采完给我看」。这一步是为了在十分钟内验证字段都能取到,而不是等全量跑完才发现字段错了。
- 核对三件要命的事。① 详情页地址是不是完整的
https://开头;② 浏览量是不是每篇都不一样的真实数字(如果整列都是 10,说明抄了占位符);③ 署名原文与记者姓名两列是不是对得上。 - 追加修正指令。发现问题用大白话说,例如「浏览量整列都是 10,请改成从计数接口取真实值」。
- 放开全量。确认无误后说「按同样规则采集全部 955 页列表,以及所有详情页,已经采过的自动跳过」。这一步耗时较长,让它在后台跑。
- 导出四件套。说「把结果整理成:数据明细 Excel、可筛选的明细网页、带图表的数据看板,再把这套采集流程打包成一个可复用的技能包」。
- 打开文件验收。数一数总条数、抽查几行字段,再看看板上「逐年发布量」的形状是不是符合常识(比如 2020 年一般会低一些)。
四、提示词模板与追问技巧
下面这段可以直接复制。注意三个要点:网址写全、字段按编号列清、把「浏览量走接口」和「断点续跑」交代死。
请帮我采集广州城市理工学院校园新闻网的新闻数据。
【目标站点】https://www.gcut.edu.cn/xyxw_183/list.htm
这个站是 webplus 站群,列表页分页形式为 /xyxw_183/list2.htm、list3.htm …
列表每条新闻在 <li class="news-list-section-item"> 里,页脚有 <a class="next"> 指向下一页。
【采集范围】先只采前 3 页列表做验证,我确认后再采全部 955 页。
【需要字段】按这个顺序:
1. 序号(最后统一重排)
2. 标题(保持原文,不要改写或截断)
3. 详情页地址(一定是完整的 https 绝对地址,不要相对路径)
4. 链接类型(站内 / 微信 / 其他:mp.weixin.qq.com 的算微信,gcut.edu.cn 的算站内)
5. 网址归档日期(详情页网址 /2026/1014/ 里的那段年月日)
6. 发布时间(详情页 article-time,格式 2026-10-08)
7. 浏览量(注意:详情页 HTML 里那个 10 是占位符!真实值请带 Referer 请求
/_visitcountdisplay?siteId=19&type=3&articleId=文章ID 这个接口获取)
8. 是否有署名 / 署名原文 / 记者姓名(把「本网讯(记者 张三)」括号里的原文和解析结果都留下)
9. 采集日期
【执行要求】
1. 先在对话里给我一张表格预览,我确认后再导出
2. 相对地址必须用网址拼接补成绝对地址
3. 支持断点续跑:已采过的链接自动跳过,中断后重跑同一条命令能接着采
4. 并发不要超过 16,请求之间留间隔,不要轰炸对方服务器
5. 导出为 Excel,文件名 campus_news.xlsx
4.1 三条常用追问指令
追问一(浏览量不对):
浏览量这一列现在每行都是 10,这是页面里的占位符。
请改成请求 /_visitcountdisplay 计数接口取真实值,
请求时必须带上这篇文章的详情页地址作为 Referer。
追问二(补全链接):
请检查「详情页地址」这一列,凡是 /开头、没有域名的相对地址,
一律补上 https://www.gcut.edu.cn 前缀,并去掉重复的链接。
追问三(署名解析):
署名解析有几种情况要处理好:全角括号「(记者 张三)」、半角括号「(记者 张三)」、
全角冒号「(记者:张三)」、以及像「记者庄 祉祎 甄诚」这种一个字姓加两个字名的情况,
还要把「汽车与交通工程学院团学学术部」这种部门名过滤掉,不要当成记者姓名。
AI 助手小贴士|全量采集一定要先说清「断点续跑」。近千页的任务中途中断是常态,能从断点接着做,才谈得上「无人值守跑完」。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请把这个采集任务改成支持断点续跑:已经采过的链接自动跳过,把结果实时追加写入文件,中断之后我重跑同一条命令就能接着采。
五、结果核对、清洗与保存
采集到的原始结果节选(示例数据,均为真实字段形态)。这一张表就是最终要交付的明细表:
| 序号 | 标题 | 详情页地址 | 链接类型 | 发布时间 | 浏览量 | 署名原文 | 记者姓名 |
|---|---|---|---|---|---|---|---|
| 1 | 我校举办2026年“科技学术季——实验室开放日”活动 | https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm | 站内 | 2026-09-30 | 69 | 记者 温苗苗 | 温苗苗 |
| 2 | 我校组织召开2026级新生座谈会 | https://www.gcut.edu.cn/2026/0929/c183a214575/page.htm | 站内 | 2026-09-29 | 195 | 记者 郭晓滨 | 郭晓滨 |
| 3 | “无界纸形”2026纸艺术研讨会开幕 多校专家齐聚我校 共探纸艺术多元可能 | https://www.gcut.edu.cn/2026/0926/c183a214529/page.htm | 站内 | 2026-09-27 | 118 | 记者 梁文思 | 梁文思 |
| 4 | 校友返校日:一场跨越二十年的重逢 | https://mp.weixin.qq.com/s/xxxxxxxx | 微信 | 2026-09-25 |
说明:第 4 行是跳转微信公众号的转发稿,原链接已不可考,表中以示意地址代替;各行「发布时间」都已统一成 YYYY-MM-DD,网址里的归档日期通常与之相同或早一天。
5.1 五步清洗,一句话一条
① 链接补全与去重:
把「详情页地址」里的相对地址补成绝对地址,并按该列去重,重复的只留第一条。
② 日期拆列:
以「发布时间」为准新增「发布日」,再派生出「发布年份」「发布月份」「年月」「星期」四列。
③ 署名拆分:
把「署名原文」解析成「记者姓名」列,多人用「、」连接;
另外补上「是否有署名」「署名人数」「首位署名」三列。
④ 缺失标注:
把浏览量按数值型处理,缺失的留空不要填 0;
统计浏览量、署名的缺失条数与占比,单独写进质量说明。
⑤ 输出交付:
先给我一张 Excel 数据明细,再生成一个可筛选排序的明细网页和一个数据看板。
5.2 这套流程最后交付四样东西
| 交付物 | 内容 | 用途 |
|---|---|---|
数据明细.xlsx | 8 个 Sheet:说明 / 数据明细 / 按年统计 / 按月统计 / 记者发稿量 / 浏览Top100 / 字段字典 / 数据质量 | 拿去做二次分析的底表 |
数据明细.html | 可筛选、可排序、可分页、可导出的单页,数据内嵌其中 | 不用装 Excel 也能随手查一条校园新闻 |
数据看板.html | 发布量趋势、年度对比、署名率、记者发稿量 Top、标题关键词等图表 | 一眼看清学校几年的宣传节奏 |
技能压缩包 | 把本案例的采集与生成流程打包成一个可复用技能 | 换一所同样用 webplus 的学校,改个网址就能再跑一遍 |
数据类型_日期.xlsx。原始结果与清洗结果各存一份,原始版本永远不覆盖——清洗出错时它是唯一能回退的事实来源。AI 助手小贴士|核对条数时别只数「有几行」。要用列表页采到的链接集合和详情页结果的链接集合做一次比对,才能真正发现漏采和重复。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请把列表页采到的链接集合和详情页结果的链接集合做比对,告诉我:漏采了哪些、多采了哪些。
课程思政|工匠精神与严谨求实 · 字段对了,数据才可用
同一件事,有人交上来的表「列名随手写、时间三种格式、链接点不开」,有人交上来的表拿来就能做分析。差距不在技术,在于肯不肯逐列核对、把细节抠到位。数据工作没有小事,一个字段口径的疏忽,可能让一整个结论翻车。
六、常见问题与合规红线
6.1 这个站点上最容易踩的五个坑
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| 详情页地址点开是 404,或者被当成站外链接丢掉 | 采到的是 /2026/0930/c183a214616/page.htm 这种相对路径 | 要求拼上域名补成绝对地址;这条不处理,会一次性丢掉大批详情页 |
浏览量整列都是 10 | 抄了详情页 HTML 里的占位符 | 要求改成带 Referer 请求计数接口取真实值 |
| 访问列表页偶发 301 跳转 | 站点对直连做了一层跳转保护 | 让采集程序正常跟随重定向即可,不要手动去拼跳转后的地址 |
| 署名解析出「汽车与交通工程学院团学学术部」这种部门名 | 页面里确实有部门署名的稿件 | 解析规则里要准备一份机构关键词表,命中就过滤掉,只留个人姓名 |
| 跑了一大半断电 / 断网,从头再来 | 采集程序没有做断点续跑 | 开工前就要求:结果实时追加写入文件,已采过的自动跳过 |
6.2 三条合规红线(每个案例都要过一遍)
- 只采公开信息。校园新闻是学校对外公开的宣传信息,可以采;但不采集需要登录才能看到的内容,不采集个人隐私。
- 控制频率。本案例并发不超过 16、请求之间留间隔;对方
robots.txt明确禁止的路径一律不碰。 - 不越权使用。采集结果用于课堂分析与学习研究;引用正文须注明来源与原文链接,不把原文整篇搬去二次发布。
课程思政|诚信与职业操守 · 技术有边界,数据有主人
数据采集的能力越强,越要守住底线。绕过反爬、批量抓取个人信息、把别人的原创内容改头换面发布,这些都不是「技术厉害」,而是踩线。真正专业的做法是:先确认授权,再控制频率,最后如实标注来源。
七、随堂自测(10 题)
点击选项即可判分,答错的题会立刻显示解析。
1案例01 采用的抓取结构是?
- A. 只抓列表页就够了
- B. 先抓详情页,再从详情页里找列表
- C. 列表页和详情页同时抓
- D. 两级抓取:先从列表页收齐链接,再逐条进详情页
2采回来的详情页地址是 /2026/0930/c183a214616/page.htm 这种形式,说明什么?
- A. 是相对路径,必须拼上网站域名才是完整网址
- B. 是绝对路径,可以直接使用
- C. 说明这条新闻已经失效
- D. 说明需要先登录才能访问
/ 开头的是相对路径,必须补上 https://www.gcut.edu.cn 才能点开,否则会被当成站外链接丢掉。3详情页里每条新闻的浏览量都显示 10,正确的理解是?
- A. 这是占位符,真实值要单独请求计数接口
- B. 每篇文章阅读量都差不多
- C. 网站把浏览量隐藏了
- D. 需要登录才能看到真实值
4「本网讯(记者庄 祉祎 甄诚)」这样的署名,正确的解析结果是?
- A. 庄、祉祎、甄诚三个人
- B. 整串当成一个人名
- C. 庄祉祎、甄诚两个人
- D. 解析失败,留空
5署名里出现「汽车与交通工程学院团学学术部」,正确的处理是?
- A. 当成记者姓名保留
- B. 整条记录删掉
- C. 按机构关键词过滤掉,不当作人名
- D. 改写成「学术部」
6要求 WorkBuddy「断点续跑」,主要是为了解决什么问题?
- A. 让采集速度更快
- B. 让采集中断后可以从断点接着做,不用从头再来
- C. 让结果更准确
- D. 让文件更小
7统计「哪个学院的稿件最多」这类问题时,最直接可用的字段是?
- A. 标题字数
- B. 链接类型
- C. 发布日期
- D. 记者姓名(配合首位署名)
8「链接类型」这个字段的主要作用是?
- A. 把站内稿与跳转微信公众号的转发稿区分开
- B. 记录链接的长度
- C. 标记链接有没有失效
- D. 统计网址的数量
9网址里的归档日期(形如 /2026/1014/)与页面上的发布时间不一致时,本案例的口径是?
- A. 以网址里的归档日期为准
- B. 以详情页发布时间为准,同时保留网址归档日期算「日期差」
- C. 取两者的平均值
- D. 两个都不用,重新查
10采集一万多条数据前,最值得先做的事是?
- A. 直接把全量跑完再看结果
- B. 先买一台配置更高的电脑
- C. 先注册一个数据库账号
- D. 先采 3 页做小样本验证,确认字段都对再放开全量