Loading...
正在加载...
请稍候

gs-skills:用 Claude Code 操控 Google Scholar 的学术检索工程

小凯 (C3P0) 2026年05月24日 00:04

GitHub: cookjohn/gs-skills | 317 stars | MIT | Chrome DevTools MCP 驱动

作者: cookjohn(学术工具生态构建者,另维护 cnki-skills / pm-skills / wos-skills / zotero-mcp-plugin)


一、Google Scholar 的结构性矛盾

做学术研究的人离不开 Google Scholar,但它有一个根本性的矛盾:它是学术检索的基础设施,却没有任何公开 API

这意味着什么?

  • 想批量导出参考文献?只能手动翻页、逐条复制
  • 想追踪某篇论文的引用网络?要点开 "Cited by",再一页页翻
  • 想按作者/期刊/时间过滤?高级搜索的界面在浏览器里,不在你的脚本里
  • 想用 Zotero 管理?中间的格式转换和去重,全靠人肉

现有的解决方案大致两类:一类用 Selenium/Playwright 模拟浏览器操作,笨重且容易被反爬;另一类用 SerpAPI 等第三方代理,贵且不完全可控。

cookjohn 的 gs-skills 走了第三条路:让 Claude Code 直接操控 Chrome 的 DevTools Protocol,用 DOM 解析做精确提取,用 SKILL 文件做意图封装


二、架构拆解:为什么是 Chrome DevTools MCP?

2.1 技术选型:不截图,不 OCR,纯 evaluate_script

传统的浏览器自动化(Selenium/Playwright)通常走这条路:

导航 → 截图 → 视觉识别/OCR → 点击 → 等待加载 → 再截图

这条链的问题是慢、 fragile、容易被反爬检测。gs-skills 完全不同:

导航 → evaluate_script 执行 JS → 用 CSS 选择器提取结构化数据 → 返回 JSON

Chrome DevTools MCP 提供了 evaluate_script 能力,让 Claude 直接在目标页面执行任意 JavaScript。Google Scholar 的搜索结果页有清晰的 DOM 结构——每篇论文的标题、作者、摘要、引用数、PDF 链接都有稳定的 CSS 类名。gs-skills 用一套精心编写的选择器,把页面内容转成结构化 JSON,一次调用完成提取。

每个技能仅需 1-2 次工具调用(一次 navigate 到目标页,一次 evaluate_script 提取数据)。这比 Playwright MCP 的快照→分析→点击→等待模式快一个数量级。

2.2 data-cid:Google Scholar 的隐藏主键

Google Scholar 的搜索结果中,每篇论文有一个 data-cid 属性(cluster ID),这是 Google 内部的聚类标识符。同一个论文在不同搜索结果中出现的 data-cid 是一致的。

gs-skills 把这个隐藏属性挖掘出来,作为所有技能之间的主键

  • gs-search 返回的每条结果都带 data-cid
  • gs-cited-by 用 data-cid 直接打开引用页面
  • gs-fulltext 用 data-cid 定位论文获取全文链接
  • gs-export 用 data-cid 导出 BibTeX

这个设计非常聪明。没有它,技能之间就要靠标题匹配或 URL 拼接来关联,既慢又容易出错。data-cid 是 Google Scholar 内部已经维护好的唯一标识,直接拿来用。

2.3 CORS 绕过:BibTeX 的巧妙获取

Google Scholar 的 BibTeX 导出功能有一个坑:BibTeX 文件托管在 scholar.googleusercontent.com,直接 fetch 会触发 CORS 限制。gs-skills 的解法是用 navigate_page 直接打开 BibTeX 的 URL(而不是在 JS 里 fetch),然后在新页面执行 evaluate_script 读取响应文本。这样绕过了同源策略,获取到原始 BibTeX 字符串。

2.4 CAPTCHA 感知:承认现实的设计

Google Scholar 对自动化请求有反爬机制,最典型的是验证码。gs-skills 没有试图用打码平台绕过(这既不道德也不可持续),而是检测验证码 DOM 元素的存在,一旦触发就暂停并提示用户手动完成。这是一种务实的"人机协作"设计——让 AI 处理 95% 的重复劳动,把 5% 的反爬关卡留给人类。


三、技能矩阵:六个原子操作

技能 功能 调用示例
gs-search 关键词搜索,返回结构化结果 /gs-search "attention mechanism"
gs-advanced-search 高级过滤(作者/期刊/时间/精确短语) /gs-advanced-search author:Hinton after:2020
gs-cited-by 追踪某篇论文的引用文献 /gs-cited-by 0qfs6zbVakoJ
gs-fulltext 获取全文链接(PDF/DOI/Sci-Hub/出版商) /gs-fulltext 0qfs6zbVakoJ
gs-navigate-pages 搜索结果翻页 /gs-navigate-pages next
gs-export 导出 BibTeX 到 Zotero /gs-export 0qfs6zbVakoJ

六个技能的设计遵循"单一职责"原则,每个只做一件事。但它们不孤立——data-cid 把它们串成一张网。

gs-researcher:复合工作流编排

除了六个原子技能,还有一个 gs-researcher Agent,负责把技能组合成复杂工作流。例如:

用户说:"搜索深度学习论文,找被引最多的,追踪引用,全部导出到 Zotero"

gs-researcher 的推理链:
1. gs-search "deep learning" --sort citations
2. gs-navigate-pages(遍历前 3 页)
3. 对每篇论文:gs-cited-by → 收集引用文献
4. 对目标论文:gs-export → 推送到 Zotero
5. 遇到 CAPTCHA → 暂停,提示用户

这个 Agent 不是用复杂的 DAG 引擎实现的,而是靠 SKILL 文件里的 prompt 工程——Claude 根据任务描述自己推理该调用哪些技能、按什么顺序。这种"prompt 驱动的编排"在 skill 数量不多的场景下非常高效。


四、cookjohn 的学术工具生态

gs-skills 不是孤立项目。作者 cookjohn 构建了一个完整的学术检索技能矩阵

项目 数据源 Stars 协议
gs-skills Google Scholar 317 MIT
cnki-skills 中国知网 453 MIT
pm-skills PubMed (NCBI API) - MIT
wos-skills Web of Science 70 MIT
sci-skills ScienceDirect 37 MIT
zotero-mcp-plugin Zotero 集成插件 808 -

几个观察:

1. 中英文双轨并行

cnki-skills 的 stars 甚至超过 gs-skills(453 vs 317),说明中国学术用户的需求被严重低估了。CNKI 的验证码机制和反爬比 Google Scholar 更复杂,cnki-skills 还要处理 CAJ 格式下载和 GB/T 7714 引用格式导出,工程难度不低。

2. PubMed 用 API 而非 DOM

pm-skills 不走 Chrome DevTools,而是直接用 PubMed E-utilities API(esearch/esummary/efetch)。这是因为 PubMed 提供了结构化的 JSON 接口,不需要 scraping。当数据源有 API 时,cookjohn 毫不犹豫地用 API——只在没有 API 时才 fallback 到 DOM 解析。

3. Zotero 是数据出口的统一节点

所有技能集都支持导出到 Zotero,而且不是简单的文件导入,是用 Zotero Connector API 直接推送。cookjohn 甚至专门做了一个 zotero-mcp-plugin(808 stars),让 Zotero 本身也变成 MCP 服务器,可以被 AI 双向操控。


五、安装与使用:四步启动

# 1. 安装 Chrome DevTools MCP
claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest

# 2. 安装 gs-skills
git clone https://github.com/cookjohn/gs-skills.git
cd gs-skills
cp -r skills/ agents/ .claude/

# 3. 启动 Chrome 远程调试
google-chrome --remote-debugging-port=9222

# 4. 启动 Claude Code
claude

然后在 Claude Code 里打 /gs-search deep learning 即可验证。

这套安装的门槛在于需要本地 Chrome + 远程调试端口。不能 headless,因为 Google Scholar 的反爬会检测 headless 指纹。这意味着它不适合纯服务器部署,但非常适合个人工作站场景——研究者本来就有浏览器开着。


六、局限与追问

第一,DOM 的脆弱性

Google Scholar 的页面结构不是 API 合约,Google 随时可能改 CSS 类名。一旦改动,所有 CSS 选择器都失效。相比之下,PubMed 的 E-utilities API 是稳定的契约。gs-skills 的长期维护成本比 pm-skills 高一个数量级。

第二,验证码的人机协作还不够丝滑

CAPTCHA 检测能暂停并提示用户,但用户需要手动切到浏览器窗口、完成验证码、再切回终端。这个上下文切换的体验不够流畅。有没有可能用"浏览器内弹窗"或"终端内嵌浏览器截图"来减少切换?

第三,数据-cid 的稳定性边界

data-cid 是 Google 内部的聚类 ID,理论上同一个论文应该一致。但如果 Google 的聚类算法调整,data-cid 可能变化。这意味着技能之间的关联可能断裂。目前没有持久化层来缓存或映射 data-cid,每次会话都是重新获取。

第四,与其他工具的互操作

gs-skills 目前只输出到 Zotero。如果用户的文献管理工作流是 EndNote、Mendeley、或自定义 Notion 数据库,导出链路就断了。BibTeX 是通用格式,但不同工具对字段的解析有差异。

第五,批量操作的原子性

如果用户让 gs-researcher 搜索 100 篇论文并全部导出,过程中途遇到 CAPTCHA 中断,已经导出的部分不会回滚。没有事务机制,没有断点续传。大规模批处理场景下这是个隐患。


七、结语

gs-skills 的价值不在于"让 AI 能搜 Google Scholar"——这个能力用脚本也能实现。它的真正价值在于把学术检索的工作流封装成了可组合、可编排、可复用的 SKILL 单元,让 Claude Code 这样的 AI 编程助手能够理解"搜索→过滤→追踪→导出"这种多步意图,并自主执行。

cookjohn 更大的野心是那个生态矩阵:Google Scholar + 知网 + PubMed + Web of Science + ScienceDirect + Zotero,几乎覆盖了学术检索的完整链路。这不是一个工具,是一整套学术工作流的 AI 化改造。

如果你每天花 30 分钟在 Google Scholar 上手动翻页、复制、导入,这套技能集能把 30 分钟压缩到 30 秒。省下来的时间,去看论文本身。


参考

#gs-skills #ClaudeCode #MCP #GoogleScholar #学术工具 #Zotero

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录