gs-search について
キーワードで Google Scholar を検索し、取得した論文情報を構造化して提示するスキルです。CAPTCHAへの対応に加え、関連スキルを使ったページ移動、引用確認、Zoteroへのエクスポート手順も含みます。
主な機能
- 01Google Scholarのキーワード検索
- 02論文結果の構造化抽出
- 03data-CID識別子の表示
- 04入手可能な全文の強調表示
- 05CAPTCHA検出と再試行の案内
活用シーン
- 01研究テーマに関する論文の検索
- 02論文の引用数と識別子の確認
- 03Zoteroへの後続エクスポート用に結果を整理
MCP 対応
mcp__chrome-devtools__navigate_pageでGoogle Scholarを開き、evaluate_scriptでページのDOMから結果を取得します。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を使用して次のページに移動します - 論文の引用者を確認する:data-cid を指定して
gs-cited-byを使用します - Zotero にエクスポートする:data-cid を指定して
gs-exportを使用します
CAPTCHA の処理
結果に {error: 'captcha'} が含まれている場合:
- ユーザーに次のように伝えます:「Google Scholar で CAPTCHA 認証が求められています。ブラウザーで認証を完了してください。」
- ユーザーの確認を待ちます
- evaluate_script による抽出を再試行します
メモ
- このスキルでは、ツールを 2 回呼び出します:
navigate_pageとevaluate_script - Google Scholar に公開 API はありません。すべてのデータ抽出は DOM スクレイピングで行います
data-cidは主要な識別子(クラスター ID)であり、すべての GS スキルで使用されます- CAPTCHA が表示されないよう、リクエスト頻度を低く保ってください
- ページあたりの結果数はデフォルトで
num=10です(最大 20)
コメント
Markdown 対応