6.7 KiB
课题组采集方法(活的方法件)
这份是方法论,不是某一校的报告。任务书从这里引用,不要再各写一套。 立此件的起因:用户指出「做事情不可能依次去枚举所有的 URL」—— 对。 我此前把爱丁堡跑出来的结果(跟了 117 个子域)写成了要求,导致 worker 去 sitemap 拉上万个 URL。 那是蛮力,不是方法。
0. 目标
每所学校产出一份「导师带的组」清单,五字段:
课题组名称 · 所在大学及研究中心 · 研究方向 · 联系邮箱 · 最近五年论文数(暂 null)
1. 方法:入口发现(有限),不是 URL 全量枚举(几万)
数量级对照(实测)
| 做法 | 入口数 | 例 |
|---|---|---|
✅ 官方院系导航 → 各院系 /research/ → 组目录 |
20–60 / 校 | Bristol 216 个入口 URL;Edinburgh 几十个 |
| ❌ sitemap 全量枚举 | 上万 / 校 | Monash 13,568 个 URL —— 绝大部分是新闻/课程/人员页 |
步骤
-
找学校官方的院系导航
…/faculties/、…/schools-departments/、…/about/structure、…/colleges-schools-and-departments⇒ 拿到该校的院系全清单(通常 10–60 个)。这就是完备性的分母。 -
每个院系进它的
/research(或/research/、/our-research、/research-and-innovation) -
⭐ 在院系 research 页上找「组目录」 —— 这是整个方法的核心 识别特征(链接文字 / 页面标题 / 路径):
research-groups·research-centres·centres·groups·institutes·labs- 最高价值:
每个组由一位 PI 带的目录(表格或多行列表,几十到几百行)- 页面原话常写作 "each led by a Principal Investigator" / "our research groups"
- 爱丁堡 Biology 这一个目录 = 140 条(占全校 643 的近 1/4)
-
目录条目 → 组自己的页面 → 取五字段
-
子域/外站:只在院系站的链接指向它时才跟(如
biology.ed.ac.uk、bristolmathsresearch.org)。 不是去 sitemap 里搜子域列表。爱丁堡那 117 个子域是跟出来的结果,不是要去枚举的目标。
2. 判据:什么算「一个组」
打开页面像人一样看:这是不是一个「导师带的做研究的团队」? 粒度上限 = 一个导师能带的规模。
| 收 | 不收 |
|---|---|
Bristol Cyber Security Group · Clark group |
Intelligent Systems Laboratory(自述 150+ 人、七个单位的联邦) |
Bristol Glaciology Centre |
校级研究所(Cabot / Brigstow / Quantum …) |
| 有具名负责人 + 方向 + 一个导师能带的规模 | Chemistry/Physics 的 theme、cluster |
| 大一级下面挂着的内层组 | 只有方向文字 + 一长串人员链接、无具名负责人的方向页 |
不是组:服务设施 · 研讨会系列 · 项目 · 学生培养计划 · 单项研究 · 空页重定向 · 主题页。 共性是页面上有一句「非团队自述」—— 你去看那句话。
字段取法
| 字段 | 取法 |
|---|---|
| 课题组名称 | 该组自己页面的 H1(无 H1 用 <title>;JS 渲染/表格行用目录里的官方组名并标 _name_source) |
| 所在大学及研究中心 | 大学 + 真实上级研究单位;⚠️ 上级是系/院/学部的不许当研究中心写,没有真上级就只写大学 |
| 研究方向 | 该组页上的方向文字。没有 ⇒ 不要(用户裁) |
| 联系邮箱 | 只接受本组页 / 本组负责人页的邮箱;不接受学院总邮箱 |
| 最近五年论文数 | null(用户裁:先留空) |
3. 完备性门槛(交付门槛,不是"尽量")
- 院系台账:
院系(全部)| research 入口 URL | 状态(取到/取不到+原因) | 组数—— 缺一行就是没做完;未取页 = 0 - 合理性校验:
组数 ÷ 院系数—— 比值荒谬地低 ⇒ 大概率漏了「组目录」这一层,回头找目录(不是去爬更多 URL) - 基准:Bristol ≈5.8/系 · Edinburgh ≈25.7/系(因校而异,只看是否荒谬地低)
4. 质量:抽样验,不逐页核(用户裁)
- 启发式自动抽(全量,不逐条判)
- 随机抽 30 条逐条开页面核 → 准确率 + 假阳性类型
- 准确率 ≥90% 且类型集中 ⇒ 定点修那一类,全量直接用 ⇒ 不要再逐页核("逐页核 643 条"是迂腐;改成抽样,一个数量级更快)
- 省下的时间全部用来把院系覆盖做全 —— 那才是真正的缺口
5. 并行安全(出过事故)
5 个 worker 曾挤在同一个 Space 的同一个 page 上,297 页跨校串页、整批作废。
- 每个 worker 自己新建 TaskSpace(不要复用别人已有的)
- 每个 URL 独占
newPage(),不要共用 p1 - 每取一页校验
page.url()与目标一致;不一致 ⇒ 废掉重取 - 成功收尾调一次
await task.finish({ keep: [] });因错误停止就别调,把spaceId报上来
6. 反面清单(不要做)
- ❌ 从 sitemap 全量枚举 URL(上万个,绝大部分无关)
- ❌ 逐页核每一条(用抽样代替)
- ❌ 在解析器里写死「哪些名字算组」「哪些学校跳过」的名单(判据必须来自源站结构/页面内容)
- ❌ 把 Pure 当主源或唯一源(⚠️ 2026-09-24 修正,见下)
- 已实证:ANU 的 Pure 最细是 Department,导师个人页的 organisations 只有 1 个行政单位 ⇒ 对 ANU 这类,Pure 里根本没有"组"这一层,抽出来的全是组织架构
- 但同样已实证(巴斯):有 11 个组只存在于 Pure(RaCE / EMaCS / BathCTI / CSCT / CEI / CREA / ADBL / MENASP / REVEAL …),主站 sitemap 里没有任何对应页面。 照"不用 Pure"字面执行会漏 11 组(119→108,−9.2%)
- ⇒ 正确规则(条件式):
主源是院系站(
院系导航 → /research/ → 组目录); Pure 作为补充源 —— 只在同时满足时收:① 源站 type ∈ 研究类 ② 页面有具名负责人 ③ 粒度是一个导师能带的规模。 既不当主源,也不整个不用。 - 判别某校该不该用 Pure 补充:看它 Pure 的 type facet 里有没有研究类 type(Bristol/Bath 有; ANU/Monash 没有)。没有 ⇒ 该校 Pure 对"组"零贡献。
- ❌ 用一条绝对规则套所有学校(每一次"ANU 所以所有学校都这样"的推广,都在巴斯被证伪了)