今天你 AI 赋能了吗?打开浏览器,在地址栏输入 xuefulu.ai,按下 Enter 即可访问学府路1号!
2026年10月17日 星期六 12:32:20
常用网址:案例设计 | 案例导航 | 学府路1号 https://xuefulu.ai | 下载 WorkBuddy https://xuefulu.ai/WorkBuddy.html

一、案例背景与采集目标

上一案例我们把 955 页列表跑完了,得到一张一万五千多行的新闻明细表。但那张表里有三个字段其实是从详情页里「抠」出来的,而它们恰好是这个站点上最难的部分:浏览量、正文、署名。这一篇就把它们逐一拆开讲透。

依然用 广州城市理工学院 · 校园新闻网 的真实详情页做例子,典型地址是 https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm。

1.1 这一篇要解决三个具体问题

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.thepaper.cn/channel_25950(正文长、图文混排,适合练正文抽取)
  • 36氪 · 科技资讯 https://36kr.com/information/technology(前端渲染较重,可作对比)
交付产物
  • 数据明细.xlsx(含正文长度与署名列)
  • 数据明细.html(正文可折叠展开)
  • 正文语料包(每篇一个 .txt,供词频分析)+ 署名解析失败清单
  • 技能压缩包(webplus 详情页 + 署名解析,含全半角标点处理规则)
难度★☆☆ 低
合规提示正文受著作权保护。课堂内做词频、统计属合理使用;整篇转载发布须获授权,案例里要明确写清这条界线。

二、数据源与字段设计

数据源有两处:详情页本身,以及它引用的一个站内计数接口。两处都要用到,缺一不可。

来源地址形态提供什么
详情页https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm正文、标题、发布时间、配图、署名
计数接口GET /_visitcountdisplay?siteId=19&type=3&articleId=文章ID,必须带 Referer(就是这篇文章的详情页地址)真实浏览量

2.1 详情页要提取的字段

字段名字段含义示例值口径与备注
标题详情页标题我校举办2026年“科技学术季——实验室开放日”活动用于核对没采错页
发布时间article-time2026-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
以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理打开具体一篇新闻详情页,定位正文容器、发布时间与浏览量占位符的位置

五步操作主线(全课程统一,每一篇都按这个顺序推进):

  1. 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
  2. 现场踩点(浏览器技能 BrowserSkill):打开 https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm,看清三处:正文从哪个标志开始到哪个标志结束、「本网讯(记者…)」写在哪、页面上那个浏览量数字长什么样。
  3. 小样试采(WorkBuddy):拿上一篇的明细表,只解析前 3 条详情页,把正文、浏览量、署名三样都取出来对照。
  4. 核对与清洗:① 浏览量有没有真的去问计数接口(整列相同的小数字就是没取);② 正文有没有混进「相关推荐」「扫描二维码」这类尾巴;③ 六种署名写法是不是都能解析。
  5. 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
起手一句话(可直接复制):用浏览器技能 BrowserSkill 打开 https://www.gcut.edu.cn/2026/0930/c183a214619/page.htm(广州城市理工学院 · 校园新闻详情页),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。

这一篇不需要重新翻列表页,直接拿上一案例的明细表来做——这正是「两级抓取」的好处:列表层与详情层可以分开推进。

  1. 把上一案例的明细表交给 WorkBuddy,说「请读取里面的详情页地址列」。
  2. 先试三条。说「先只解析前 3 条,把正文、浏览量、署名都取出来给我看」。
  3. 专盯浏览量。如果是整列相同的小数字,就说明抄了占位符,立刻要求「改成带 Referer 请求计数接口取真实值」。
  4. 检查正文纯净度。看开头结尾有没有混进「相关推荐」「扫描二维码关注我们」,有就让 AI 按起止标志裁掉。
  5. 喂给它署名规则。把第二节那六种情况连同示例一起发过去,说「按这些规则解析署名,并保留原文列」。
  6. 放开批量,说「按同样规则处理全部 15,268 条,失败的单独记下来」。
  7. 回收结果。要一份「解析失败清单」:哪些文章没有匹配到「本网讯」,原因是什么。
这一篇里 WorkBuddy 会写出一个解析脚本。脚本里那些规则(六种署名情况)其实是你提供的——AI 负责把它变成可重复执行的代码,你负责告诉它真实世界长什么样。这就是人机协作的分工。

四、提示词模板与追问技巧

提示词
我有一份校园新闻明细表,里面有「详情页地址」列。
请读这一列,逐条进入详情页,采集并解析下面这些字段:

  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,供后续词频分析
把正文单独导出成纯文本语料,是很有用的一步:后面的词频统计、主题分析,都更适合直接读纯文本,而不是从 Excel 单元格里抠。

课程思政|数据安全与法治素养 · 会采集,更要会收敛

一个成熟的数据工作者,既知道怎么把数据拿下来,也知道哪些数据不该留、不该传、不该发。给自己的项目划一条「只读不传播」的线,是对原创者的尊重,也是对自己的保护。

六、常见问题与合规红线

现象原因怎么处理
浏览量整列都是同一个数字抄了详情页里的占位符改成带 Referer 请求计数接口
计数接口返回「非法请求」请求时没带这篇文章的网址作为 Referer补上 Referer 头再请求
同一篇文章浏览量两次不一样计数接口在真实浏览器打开详情页时会加 1,属正常漂移在报告里说明口径与采集时间即可,不是 bug
署名被拆成「庄」「祉祎」两个人一个字姓加两个字名的合并规则没生效在解析规则里补上这条合并逻辑
正文里混进「相关推荐」推荐位与正文在同一个大容器里按容器的起止标志裁剪,并抽查 3 条确认

6.1 版权与传播边界

新闻正文是有著作权的内容。课堂分析、词频统计属于合理使用;但把正文原样搬去公众号、网站、公开作业集里传播,就超出了边界。

「我采集到的东西就是我的」是错的。采集只是让你能读、能算,不代表你能随便转载。这条在后面的图书、影视、文献类案例里会反复出现。

课程思政|诚信与职业操守 · 数据可以采,结论不能编

解析失败就是解析失败,不要为了让表格「好看」而硬填一个名字。编造出来的数据比空值危险得多——它会让人基于错误的信息做出判断。诚实地留下空白、记录失败原因,是数据工作者最硬的底线。

七、随堂自测(10 题)

点击选项即可判分,答错的题会立刻显示解析。

已答 0 / 10 · 正确 0 —

1案例02 中「浏览量」这个字段的正确来源是?

  • A. 详情页 HTML 里写的那个数字
  • B. 列表页上的数字
  • C. 带 Referer 请求站内计数接口取到的值
  • D. 自己根据时间估算
答案:C。详情页里的数字是占位符,真实值必须带 Referer 请求计数接口获得。

2请求计数接口时为什么必须带上 Referer?

  • A. 接口会校验请求来自哪篇文章,不带就返回非法请求
  • B. 为了让请求更快
  • C. 为了节省流量
  • D. 为了拿到更多的字段
答案:A。计数接口要求 Referer 指向文章详情页,否则会拒绝请求。

3「本网讯(记者 张三 摄影 李四)」正确的解析结果是?

  • A. 张三、李四两个人都是记者
  • B. 李四
  • C. 解析失败
  • D. 张三(摄影者李四不算记者)
答案:D。遇到「摄影」等角色词要截断,只保留记者署名部分。

4正文里混进了「扫描二维码关注我们」,最合理的处理是?

  • A. 原样保留,反正是页面上的东西
  • B. 把整篇文章删掉重采
  • C. 按正文容器的起止标志裁掉,并抽查确认
  • D. 手动一条条改
答案:C。先确定正文容器与起止标志,按规则批量裁剪,再抽查验证,效率与准确性兼顾。

5为什么要把「署名原文」和「记者姓名」两列都保留?

  • A. 为了占地方
  • B. 解析规则可能有例外,留原文便于日后复核与重跑
  • C. 两个字段内容完全一样,纯属冗余
  • D. 方便打印
答案:B。解析规则再完善也会有边界情况,保留原文就能在发现问题后回炉重跑,不必重新采集。

6同一篇文章两次查到的浏览量略有不同,最可能的原因是?

  • A. 采集程序有 bug
  • B. 网站在造假
  • C. 真实浏览器打开详情页会让计数加一,属正常漂移
  • D. 接口地址写错了
答案:C。计数会随真实访问递增,属正常现象,在报告里说明采集时间即可。

7处理「记者庄 祉祎 甄诚」时,最容易犯的错误是?

  • A. 把「庄」「祉祎」拆成两个人
  • B. 把三个人都当成记者
  • C. 把「甄诚」丢掉
  • D. 把整串当成一个人名
答案:A。一个字姓加两个字名要合并成「庄祉祎」,否则会造成记者排名错误。

8判断某条记录是「无个人署名」还是「解析失败」,为什么要分开统计?

  • A. 两者性质不同:前者是数据本身如此,后者是规则没覆盖到
  • B. 为了凑字段数量
  • C. 两者没有区别
  • D. 方便导出文件
答案:A。「无署名」是页面本身就没有,属数据事实;「解析失败」说明规则要补,属程序问题。

9把正文导出成纯文本语料,主要好处是?

  • A. 文件看起来更整洁
  • B. 后续词频、主题分析更适合直接读纯文本
  • C. 可以让文件更小
  • D. 方便打印
答案:B。纯文本是文本分析的常见输入形式,比从表格单元格里抠文本方便得多。

10关于采集到的新闻正文,下面哪一条超出了合理边界?

  • A. 课堂内做词频统计
  • B. 统计报道数量随时间的变化
  • C. 引用标题和链接做展示
  • D. 把正文原样搬去自己的公众号发布
答案:D。正文受著作权保护。课堂分析属合理使用,整篇公开转载需要获得授权。