mcpField
G
gs-search

gs-search

github.com/cookjohn生产力538443 次安装33 周前更新
代码仓库

关于 gs-search

这项 Skill 按关键词搜索 Google Scholar,并将抓取到的论文结果整理成结构化列表。它包含 CAPTCHA 处理说明,以及通过相关 Skill 翻页、查询引用和导出到 Zotero 的后续流程。

主要功能

  1. 01按关键词搜索 Google Scholar
  2. 02提取结构化论文结果
  3. 03显示 data-CID 标识符
  4. 04突出显示可用全文
  5. 05CAPTCHA 检测与重试说明

适用场景

  1. 01查找某个研究主题的论文
  2. 02查看论文引用数和标识符
  3. 03整理结果以便后续导出到 Zotero

MCP 相关

它使用 mcp__chrome-devtools__navigate_page 打开 Google Scholar,并通过 evaluate_script 抓取页面 DOM 中的结果数据。该 Skill 依赖浏览器工具,而非 Google Scholar 公共 API。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cookjohn/gs-skills --skill gs-search

安装后在 Claude Code 中输入/gs-search确认已加载。

详细介绍

Google Scholar 基本搜索

使用关键词搜索 Google Scholar 中的论文。通过 DOM 抓取返回结构化结果列表。

参数

$ARGUMENTS 包含搜索关键词。

步骤

1. 导航

使用 mcp__chrome-devtools__navigate_page:

  • url: https://scholar.google.com/scholar?q={URL_ENCODED_KEYWORDS}&hl=en&num=10
2. 提取结果(evaluate_script)

等待结果加载,检查是否出现 CAPTCHA,然后抓取 DOM:

async () => {
  // Wait for results or CAPTCHA
  for (let i = 0; i < 20; i++) {
    if (document.querySelector('#gs_res_ccl') || document.querySelector('#gs_captcha_ccl')) break;
    await new Promise(r => setTimeout(r, 500));
  }

  // CAPTCHA check
  if (document.querySelector('#gs_captcha_ccl') || document.body.innerText.includes('unusual traffic')) {
    return { error: 'captcha', message: 'Google Scholar requires CAPTCHA verification. Please complete it in your browser, then tell me to continue.' };
  }

  const items = document.querySelectorAll('#gs_res_ccl .gs_r.gs_or.gs_scl');
  const results = Array.from(items).map((item, i) => {
    const titleEl = item.querySelector('.gs_rt a');
    const meta = item.querySelector('.gs_a')?.textContent || '';
    // Parse "Author1, Author2 - Journal, Year - publisher"
    const parts = meta.split(' - ');
    const authors = parts[0]?.trim() || '';
    const journalYear = parts[1]?.trim() || '';
    const citedByEl = item.querySelector('.gs_fl a[href*="cites"]');
    const relatedEl = item.querySelector('.gs_fl a[href*="related"]');
    const versionsEl = item.querySelector('.gs_fl a[href*="cluster"]');

    return {
      n: i + 1,
      title: titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '',
      href: titleEl?.href || '',
      authors,
      journalYear,
      citedBy: citedByEl?.textContent?.match(/\d+/)?.[0] || '0',
      citedByUrl: citedByEl?.href || '',
      dataCid: item.getAttribute('data-cid') || '',
      fullTextUrl: (item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a'))?.href || '',
      snippet: item.querySelector('.gs_rs')?.textContent?.trim()?.substring(0, 200) || '',
      relatedUrl: relatedEl?.href || '',
      versionsUrl: versionsEl?.href || '',
      versions: versionsEl?.textContent?.match(/\d+/)?.[0] || ''
    };
  });

  const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || '';
  const currentUrl = window.location.href;
  return { total: totalText, resultCount: results.length, currentUrl, results };
}
3. 报告

以编号列表形式呈现结果:

Searched Google Scholar for "$ARGUMENTS": {total}

1. {title}
   Authors: {authors} | {journalYear}
   Cited by: {citedBy} | [Full text]({fullTextUrl})
   Data-CID: {dataCid}

2. ...

始终显示 dataCid——这是用于导出引文和追踪「被引用」情况的唯一标识符。

如果有 fullTextUrl,请突出显示(表示可获取开放访问的 PDF/HTML)。

4. 后续操作

当用户想要:

  • 查看更多结果:使用 gs-navigate-pages 前往下一页
  • 查看引用某篇论文的人:使用 gs-cited-by 并提供 data-cid
  • 导出到 Zotero:使用 gs-export 并提供 data-cid(一个或多个)

CAPTCHA 处理

如果结果包含 {error: 'captcha'}:

  1. 告知用户:「Google Scholar 正在请求 CAPTCHA 验证。请在浏览器中完成验证。」
  2. 等待用户确认
  3. 重试 evaluate_script 提取操作

注意事项

  • 此技能使用 2 次工具调用:navigate_page + evaluate_script
  • Google Scholar 没有公共 API——所有数据提取均通过 DOM 抓取完成
  • data-cid 是主要标识符(集群 ID),用于所有 GS 技能
  • 控制请求频率,避免触发 CAPTCHA
  • 每页默认显示 num=10 条结果(最多 20 条)

评论

支持 Markdown