一、案例背景与采集目标
上一案例我们把 955 页列表跑完了,得到一张一万五千多行的新闻明细表。但那张表里有三个字段其实是从详情页里「抠」出来的,而它们恰好是这个站点上最难的部分:浏览量、正文、署名。这一篇就把它们逐一拆开讲透。
依然用 广州城市理工学院 · 校园新闻网 的真实详情页做例子,典型地址是 https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm。
1.1 这一篇要解决三个具体问题
- 浏览量为什么都是 10?——搞清占位符与计数接口的关系,学会带 Referer 取值;
- 正文到底在哪个容器里?——找到
portletmode="simpleArticleContent"这个容器,把正文干净地取出来; - 「本网讯(记者 张三)」怎么拆?——处理全角半角括号、全角冒号、一个字姓加两个字名、部门名混在里面等六种边界情况。
1.2 详情页的结构长什么样
| 部位 | 长什么样 | 取什么 |
|---|---|---|
正文容器 | <div portletmode="simpleArticleContent">…</div> | 正文全文 |
标题 | <h2 class="news-detail-article-title"> | 详情页标题(用于核对没采错页) |
时间 | <span class="article-time">时间:2026-10-08</span> | 发布时间 |
计数锚点 | <span class="WP_VisitCount" url="/_visitcountdisplay?…">10</span> | 真实浏览量(那个 10 是假的) |
署名 | 正文开头的 本网讯(记者 温苗苗) | 记者姓名 |
1.3 为什么这一篇值得单独讲
| 问题 | 看起来简单,其实 | 不处理的后果 |
|---|---|---|
| 浏览量 | 页面上明明写着数字,但它是假的 | 整列都是 10,看板上的「热门稿件」全是随机顺序 |
| 正文 | 正文、相关推荐、二维码关注块挤在同一个大容器里 | 正文里混进「扫描关注我们」,统计字数全错 |
| 署名 | 页面上的写法有六种以上变体 | 记者发稿量排名里混进部门名、把一个人的名字拆成两个 |
AI 助手小贴士|详情页解析最稳的打法是「先试三条」。用 3 条验证浏览量、正文、署名都取对了,再放开到全量,能省下大量返工。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请只解析这一篇详情页,把正文全文、浏览量、署名原文列出来给我看,先不要批量。
目标站点与交付产物
下表是本篇用到的真实站点。绿色是课堂可稳定复现的示范站点;橙色是延伸站点,多数有登录墙或风控,课堂上只讲结构、原理与合规边界,不教绕过。
| 项目 | 内容 |
|---|---|
| 示范站点 | 广州城市理工学院 · 校园新闻详情页 https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm 两级抓取的第二级;正文在 portletmode=simpleArticleContent 容器内,浏览量走站内计数接口 |
| 延伸站点 |
|
| 交付产物 |
|
| 难度 | ★☆☆ 低 |
| 合规提示 | 正文受著作权保护。课堂内做词频、统计属合理使用;整篇转载发布须获授权,案例里要明确写清这条界线。 |
二、数据源与字段设计
数据源有两处:详情页本身,以及它引用的一个站内计数接口。两处都要用到,缺一不可。
| 来源 | 地址形态 | 提供什么 |
|---|---|---|
详情页 | https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm | 正文、标题、发布时间、配图、署名 |
计数接口 | GET /_visitcountdisplay?siteId=19&type=3&articleId=文章ID,必须带 Referer(就是这篇文章的详情页地址) | 真实浏览量 |
2.1 详情页要提取的字段
| 字段名 | 字段含义 | 示例值 | 口径与备注 |
|---|---|---|---|
标题 | 详情页标题 | 我校举办2026年“科技学术季——实验室开放日”活动 | 用于核对没采错页 |
发布时间 | article-time | 2026-10-08 | 精确到日;页面若给到时分秒就照录 |
正文 | 正文全文 | (长文本) | 只取正文容器内的内容,剔除推荐位与关注块 |
浏览量 | 真实阅读量 | 69 | 来自计数接口,不是页面上的 10 |
署名原文 | 括号内原文 | 记者 温苗苗 | 原样保留,便于复核 |
记者姓名 | 解析出的姓名 | 温苗苗 | 多人用「、」连接 |
署名人数 | 署名人数 | 1 | 多人合作稿计为 2 人及以上 |
配图地址 | 正文配图 | (共 2 张,分号分隔) | 注意区分懒加载占位图 |
正文字数 | 正文长度 | 742 | 去标点,用于筛掉通知类短稿 |
所属栏目 | 页面面包屑 | 校园新闻 | 取面包屑「新闻中心」下的二级栏目 |
作者单位 | 时间旁的「单位」 | 华南理工大学广州学院新官网 | 照录「单位:」一行原文,页面没写就留空 |
责任编辑 | 文末署名尾部 | 涂昌鹏 | 取文末「编辑:」之后的人名,与记者分开统计 |
配图数量 | 正文图片计数 | 2 | 由配图地址列计数得出,懒加载占位图不计入 |
数据批次 | 采集侧补充字段 | 2026-10-08-01 | 不是页面字段,记录采集日期与规则版本,便于回炉核对 |
后五个字段里有三个是页面本身就有、只是容易被忽略的:所属栏目写在详情页的面包屑里,作者单位在时间旁边的「单位:」一行,责任编辑藏在文末署名的「编辑:」后面;配图数量由配图地址直接数出来;数据批次则是采集时自己补上的管理列,日后发现规则要改,靠它一眼认出哪批数据需要回炉。
2.2 署名解析要处理的六种情况
这是本案例最「脏」的一块。同一个站点的署名写法至少有下面六种变体,解析规则要逐类覆盖:
| 情况 | 页面原文 | 正确结果 |
|---|---|---|
半角括号 | 本网讯(记者 李嘉淇) | 李嘉淇 |
全角括号 | 本网讯(记者 蒋艳芳) | 蒋艳芳 |
全角冒号 | 本网讯(记者:黄莉莉) | 黄莉莉 |
无空格连写 | 本网讯(记者庄 祉祎 甄诚) | 庄祉祎、甄诚 |
带动词后缀 | 本网讯(记者 张三 摄影 李四) | 张三(摄影者不算记者) |
部门署名 | 本网讯(汽车与交通工程学院团学学术部) | 解析为空,标记为无个人署名 |
这六种变体用一条正则就能先把「记者署名」从原文里认出来——先匹配、再清洗,比六条字符串替换稳得多:
正则:本网讯\s*[((]\s*记者\s*[::]?\s*([^))]+)\s*[))]
拆解:[((] 与 [))] → 全角、半角括号都要能匹配(对应第 1、2 行)
[::]? → 冒号可有可无(对应第 3 行)
([^))]+) → 捕获括号里除右括号外的全部原文
拿到捕获组再二步清洗:按「摄影/摄像/通讯员」切断取记者段,
多人用空格或顿号分开 →「庄祉祎 甄诚」拆成两人(对应第 4、5 行)。
原文里没有「记者」二字(部门署名)自然匹配不上 → 标记为无个人署名。
AI 助手小贴士|署名解析的边界情况没法靠猜,最好的办法是让 AI 先把全站出现的所有「本网讯(…)」原文列出来,你再定规则。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请把采集结果里所有「本网讯(…)」括号内的原文去重后列出来,按出现次数排序,先不要解析成姓名。
课程思政|工匠精神与严谨求实 · 把边界情况一条条抠干净
署名解析这种事,做 90% 和做 100% 的差别,写代码的人最清楚:剩下 10% 的例外,往往要花掉一半的时间。肯不肯把「一个字姓加两个字名」这种细节抠出来,决定了一个人的数据能不能被信任。
三、零代码操作步骤
工具与技能|先看清三个角色,再动手
本篇全程零代码:你把要求说清楚,AI 去执行,你负责验收。三个角色分工如下——浏览器技能指的是腾讯开源的 BrowserSkill,它能让 AI 直接操作你电脑上真实的浏览器(可复用已经登录的状态),自己开一个独立窗口干活,不打扰你正在看的网页;遇到验证码、登录或确认弹窗,它会停下来交给你本人处理。
| 角色 | 负责什么 | 在本案例里具体做什么 |
|---|---|---|
| 你 | 确认字段清单、验收结果、清洗与合规把关 | 盯字段清单、核对结果、处理异常(如验证码) |
| WorkBuddy | 接中文指令:探字段 → 批量采 → 清洗 → 导出交付物 | 拆解本篇的采集任务并跑完全量、产出交付物 |
| 浏览器技能 BrowserSkill | 以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理 | 打开具体一篇新闻详情页,定位正文容器、发布时间与浏览量占位符的位置 |
五步操作主线(全课程统一,每一篇都按这个顺序推进):
- 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
- 现场踩点(浏览器技能 BrowserSkill):打开
https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm,看清三处:正文从哪个标志开始到哪个标志结束、「本网讯(记者…)」写在哪、页面上那个浏览量数字长什么样。 - 小样试采(WorkBuddy):拿上一篇的明细表,只解析前 3 条详情页,把正文、浏览量、署名三样都取出来对照。
- 核对与清洗:① 浏览量有没有真的去问计数接口(整列相同的小数字就是没取);② 正文有没有混进「相关推荐」「扫描二维码」这类尾巴;③ 六种署名写法是不是都能解析。
- 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
用浏览器技能 BrowserSkill 打开 https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm(广州城市理工学院 · 校园新闻详情页),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。这一篇不需要重新翻列表页,直接拿上一案例的明细表来做——这正是「两级抓取」的好处:列表层与详情层可以分开推进。
- 把上一案例的明细表交给 WorkBuddy,说「请读取里面的详情页地址列」。
- 先试三条。说「先只解析前 3 条,把正文、浏览量、署名都取出来给我看」。
- 专盯浏览量。如果是整列相同的小数字,就说明抄了占位符,立刻要求「改成带 Referer 请求计数接口取真实值」。
- 检查正文纯净度。看开头结尾有没有混进「相关推荐」「扫描二维码关注我们」,有就让 AI 按起止标志裁掉。
- 喂给它署名规则。把第二节那六种情况连同示例一起发过去,说「按这些规则解析署名,并保留原文列」。
- 放开批量,说「按同样规则处理全部 15,268 条,失败的单独记下来」。
- 回收结果。要一份「解析失败清单」:哪些文章没有匹配到「本网讯」,原因是什么。
四、提示词模板与追问技巧
我有一份校园新闻明细表,里面有「详情页地址」列。
请读这一列,逐条进入详情页,采集并解析下面这些字段:
1. 标题(详情页 h2.news-detail-article-title,用于核对)
2. 发布时间(article-time 里的「时间:」之后,格式 2026-10-08)
3. 正文全文(只取 portletmode="simpleArticleContent" 容器内的正文,
去掉「相关推荐」「扫描二维码关注我们」这类块)
4. 浏览量:注意详情页 HTML 里的 10 是占位符,真实值要带 Referer
请求 /_visitcountdisplay?siteId=19&type=3&articleId=文章ID
5. 署名原文(「本网讯(…)」括号内的原文,原样保留)
6. 记者姓名(按下面规则解析)
7. 配图地址(正文内的图片,多张用分号分隔)
8. 正文字数(去标点)
9. 所属栏目(面包屑「新闻中心」下的二级栏目)、作者单位(照录「单位:」一行)、
责任编辑(文末「编辑:」之后的人名,与记者分开)、配图数量(由配图地址计数)、
数据批次(不是页面字段,按采集日期加规则版本补上,如 2026-10-08-01)
【署名解析规则】
- 全角括号「(记者 张三)」与半角括号「(记者 张三)」都要能识别
- 全角冒号「(记者:张三)」要先换成半角再解析
- 「记者庄 祉祎 甄诚」这种一个字姓 + 两个字名,要合并成「庄祉祎」再与「甄诚」分开
- 「记者 张三 摄影 李四」遇到 摄影/通讯员/编辑/审稿/责编/供图/校对 等词就截断
- 命中「学院、部、中心、团队、委员会、记者团」等机构关键词的,不当成人名
【执行要求】
- 先只解析前 3 条给我验证,确认无误后再处理全部
- 每条之间间隔 2 秒
- 解析失败的(没匹配到本网讯)单独列一张表,写明地址和原因,不要丢弃
4.1 三条常用追问指令
追问一(浏览量是假的):
浏览量整列都是 10,这是页面占位符。
请改成请求 /_visitcountdisplay 接口取真实值,请求时带上详情页地址作为 Referer。
追问二(正文混进杂质):
第 2 条的正文结尾混进了「扫描二维码关注我们」。
请按正文容器的起止标志裁掉这类内容,并抽查 3 条确认。
追问三(署名解析有误):
「汽车与交通工程学院团学学术部」被当成了记者姓名。
请准备一份机构关键词表(学院、部、中心、团队、委员会、记者团…),
命中就过滤掉,只保留个人姓名。
AI 助手小贴士|让 AI 把解析「失败的样本」单独列出来,是改进规则最快的方式——看着那几十条失败样例,规则该怎么补一目了然。
打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请把署名解析失败的记录单独导出,并在每条后面写一句「失败原因」,我要据此补规则。
五、结果核对、清洗与保存
解析完之后,重点核对下面四项,任意一项异常都要回炉:
| 核对项 | 正常表现 | 发现问题怎么问 |
|---|---|---|
| 浏览量分布 | 数值有大有小,最高几千、最低个位数 | 「浏览量整列都是 10,请改走计数接口取真实值」 |
| 正文纯度 | 开头是新闻第一段,结尾停在正文最后一段 | 「正文里混入了推荐位,请按容器起止标志裁掉」 |
| 署名解析 | 姓名是 2~4 个汉字,没有部门名、没有断成两半 | 「请按机构关键词表过滤,并处理一字姓加两字名的合并」 |
| 解析失败率 | 失败的有明确原因(早期短讯没用本网讯格式) | 「请给出失败清单与原因分布」 |
5.1 四步清洗
① 正文去杂质:
去掉正文里的「相关推荐」「扫描二维码」「责任编辑」等非正文块,去掉连续空行。
② 署名归一:
把「记者姓名」按「、」拆开后去重,保证同一篇文章里同一个人只算一次。
③ 缺失标注:
把没有署名的记录标成「无个人署名」,与「解析失败」分开统计。
④ 输出两份:
一份完整明细(含正文),一份轻量明细(不含正文,便于快速打开)。
5.2 保存与归档
campus_news_detail.xlsx 解析结果明细(含正文、署名原文、记者姓名)
campus_news_detail_light.xlsx 轻量版(去掉正文列,便于快速打开)
byline_failed.jsonl 署名解析失败清单(地址 + 原因)
corpus/ 正文纯文本,每篇一个 txt,供后续词频分析
课程思政|数据安全与法治素养 · 会采集,更要会收敛
一个成熟的数据工作者,既知道怎么把数据拿下来,也知道哪些数据不该留、不该传、不该发。给自己的项目划一条「只读不传播」的线,是对原创者的尊重,也是对自己的保护。
六、常见问题与合规红线
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| 浏览量整列都是同一个数字 | 抄了详情页里的占位符 | 改成带 Referer 请求计数接口 |
| 计数接口返回「非法请求」 | 请求时没带这篇文章的网址作为 Referer | 补上 Referer 头再请求 |
| 同一篇文章浏览量两次不一样 | 计数接口在真实浏览器打开详情页时会加 1,属正常漂移 | 在报告里说明口径与采集时间即可,不是 bug |
| 署名被拆成「庄」「祉祎」两个人 | 一个字姓加两个字名的合并规则没生效 | 在解析规则里补上这条合并逻辑 |
| 正文里混进「相关推荐」 | 推荐位与正文在同一个大容器里 | 按容器的起止标志裁剪,并抽查 3 条确认 |
6.1 版权与传播边界
新闻正文是有著作权的内容。课堂分析、词频统计属于合理使用;但把正文原样搬去公众号、网站、公开作业集里传播,就超出了边界。
- 采集到的正文只在课程内部使用,不对外发布;
- 做展示时只引用标题与链接,或截取极短片段并注明出处;
- 分析结论可以公开,但原始正文文件不要打包外传。
课程思政|诚信与职业操守 · 数据可以采,结论不能编
解析失败就是解析失败,不要为了让表格「好看」而硬填一个名字。编造出来的数据比空值危险得多——它会让人基于错误的信息做出判断。诚实地留下空白、记录失败原因,是数据工作者最硬的底线。
七、随堂自测(10 题)
点击选项即可判分,答错的题会立刻显示解析。
1案例02 中「浏览量」这个字段的正确来源是?
- A. 详情页 HTML 里写的那个数字
- B. 列表页上的数字
- C. 带 Referer 请求站内计数接口取到的值
- D. 自己根据时间估算
2请求计数接口时为什么必须带上 Referer?
- A. 接口会校验请求来自哪篇文章,不带就返回非法请求
- B. 为了让请求更快
- C. 为了节省流量
- D. 为了拿到更多的字段
3「本网讯(记者 张三 摄影 李四)」正确的解析结果是?
- A. 张三、李四两个人都是记者
- B. 李四
- C. 解析失败
- D. 张三(摄影者李四不算记者)
4正文里混进了「扫描二维码关注我们」,最合理的处理是?
- A. 原样保留,反正是页面上的东西
- B. 把整篇文章删掉重采
- C. 按正文容器的起止标志裁掉,并抽查确认
- D. 手动一条条改
5为什么要把「署名原文」和「记者姓名」两列都保留?
- A. 为了占地方
- B. 解析规则可能有例外,留原文便于日后复核与重跑
- C. 两个字段内容完全一样,纯属冗余
- D. 方便打印
6同一篇文章两次查到的浏览量略有不同,最可能的原因是?
- A. 采集程序有 bug
- B. 网站在造假
- C. 真实浏览器打开详情页会让计数加一,属正常漂移
- D. 接口地址写错了
7处理「记者庄 祉祎 甄诚」时,最容易犯的错误是?
- A. 把「庄」「祉祎」拆成两个人
- B. 把三个人都当成记者
- C. 把「甄诚」丢掉
- D. 把整串当成一个人名
8判断某条记录是「无个人署名」还是「解析失败」,为什么要分开统计?
- A. 两者性质不同:前者是数据本身如此,后者是规则没覆盖到
- B. 为了凑字段数量
- C. 两者没有区别
- D. 方便导出文件
9把正文导出成纯文本语料,主要好处是?
- A. 文件看起来更整洁
- B. 后续词频、主题分析更适合直接读纯文本
- C. 可以让文件更小
- D. 方便打印
10关于采集到的新闻正文,下面哪一条超出了合理边界?
- A. 课堂内做词频统计
- B. 统计报道数量随时间的变化
- C. 引用标题和链接做展示
- D. 把正文原样搬去自己的公众号发布