学术科研
在 CNKI 论文详情页提取完整元数据:有论文 URL…
适用于需要获取 CNKI 单篇论文完整元数据(标题、作者、机构、摘要、关键词、基金、分类号等)的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 CNKI 论文详情页提取完整元数据:特定
解决思路
- 参数:`$ARGUMENTS` 可选,是 CNKI 论文详情 URL(包含 `kcms2/article/abstract`);如果未提供,则假定当前页面已经是论文详情页。
- 如果 `$ARGUMENTS` 包含 URL:使用 `mcp__chrome-devtools__navigate_page` 导航到该 URL。
- 使用 `mcp__chrome-devtools__wait_for` 等待文本 `["摘要"]`,timeout 15000。
- 使用 `mcp__chrome-devtools__take_snapshot` 检查验证码;若发现“拖动下方拼图完成验证”,提示用户:“CNKI 正在显示滑块验证码。请在 Chrome 浏览器中手动完成拼图验证,完成后告诉我继续。”
- 使用 `mcp__chrome-devtools__evaluate_script` 执行提取函数:先查询 `.brief`,不存在则返回 `{ error: 'Paper detail section (.brief) not found' }`。
- 标题:取 `.brief h1` 的 `innerText.trim()`,移除末尾“附视频”和“网络首发”后缀。
- 作者:取第一个 `h3.author` 下所有 `a`;姓名去掉末尾数字并 trim;末尾数字作为 `affiliationNum`;返回 `{ name, affiliationNum }` 数组。
- 机构:若存在第二个 `h3.author`,取其中所有 `a` 的 `innerText.trim()` 作为机构数组。
- 摘要:取 `.abstract-text` 的 `innerText.trim()`,没有则为空字符串。
- 关键词:取 `p.keywords` 下所有 `a`,去掉末尾分号并 trim;没有则为空数组。
- 基金:取 `p.funds` 的 `innerText.trim()`,没有则为空字符串。
- 分类号:取 `.clc-code` 的 `innerText.trim()`,没有则为空字符串。
- 期刊:取 `.doc-top` 下第一个 `a` 的 `innerText.trim()`,没有则为空字符串。
- 出版信息:取 `.head-time` 的 `innerText.trim()`,没有则为空字符串。
- 是否网络首发:判断 `.brief .icon-shoufa` 是否存在。
- 目录:取 `.catalog-list, .catalog-listDiv` 的 `innerText.trim()`,没有则为空字符串。
- 引证网络计数:遍历 `ul.module-tab.tpl_lieteratures li`;用 `data-id` 作为键;从文本匹配数字作为 `count`;`label` 为去掉数字后的文本。
- 返回对象包含:`title`, `authors`, `affiliations`, `abstract`, `keywords`, `fund`, `classification`, `journal`, `pubInfo`, `isOnlineFirst`, `toc`, `citationInfo`。
- 格式化输出:按模板展示 `## {title} {isOnlineFirst ? “[网络首发]” : “”}`;**Authors:** 每个作者 `- {name} ({affiliation})`;**Affiliations:** 每个机构 `- {affiliation}`;**Journal:** {journal};**Publication Info:** {pubInfo};**Abstract:** {abstract};**Keywords:** 用英文逗号连接;**Fund:** {fund};**Classification:** {classification};**Citation Network:** 每种引证类型 `- {label}: {count}`。
- 降级:若 JS 提取失败,使用 `mcp__chrome-devtools__take_snapshot` 解析 accessibility tree:标题取 `heading` level 1;作者取 URL 包含 `kcms2/author/detail` 的 `link`;机构取 URL 包含 `kcms2/organ/detail` 的 `link`;摘要取“摘要:”后的 `StaticText`;关键词取 URL 包含 `kcms2/keyword/detail` 的 `link`;基金取“基金资助:”后的 `link`;分类号取“分类号:”后的 `StaticText`。
- 已验证 DOM 选择器参考:论文区域 `.brief`;标题 `.brief h1`(可能含图标,需清理文本);作者 `.brief h3.author:first-of-type a`(文本带角标数字,如 `张三1`);机构 `.brief h3.author:nth-of-type(2) a`(文本以 `N.` 开头,如 `1.北京大学`);摘要 `.abstract-text`;关键词 `p.keywords a`(分号分隔的关键词链接);基金 `p.funds`;分类号 `.clc-code`;期刊 `.doc-top a`;网络首发 `.brief .icon-shoufa`(存在则为网络首发);引证标签页 `ul.module-tab.tpl_lieteratures li`(`data-id` 属性标识类型)。
适用边界 · 注意事项
- 不适用于非 CNKI 页面或非论文详情页。
- 不适用于需要批量抓取多篇论文、绕过验证码或登录限制的场景。
- 若无法使用 Chrome DevTools MCP 或浏览器自动化,不适用。