谷歌学术搜索

paleblue111/Google-Scholar-Search
4 Stars 753 次浏览 更新于 2026-08-23

一个基于 FastMCP 框架的 Google Scholar 搜索服务器,使用 Playwright 浏览器自动化技术实现文献搜索功能。支持多页搜索、详细信息提取和反检测机制。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "google-scholar": {
      "args": [
        "d:\\MCP\\google-scholar-search-py\\server.py"
      ],
      "autoApprove": [
        "search_google_scholar",
        "get_article_details"
      ],
      "command": "python",
      "disabled": false
    }
  }
}

服务介绍

Google Scholar Search MCP Server

一个基于 FastMCP 框架的 Google Scholar 搜索服务器,使用 Playwright 浏览器自动化技术实现文献搜索功能。

功能特性

  • 🔍 智能搜索: 在 Google Scholar 上搜索学术文献
  • 📄 分页支持: 支持多页搜索,一次性获取大量结果
  • 🤖 浏览器自动化: 使用 Playwright 完全模拟真实用户浏览器操作
  • 📊 详细信息: 提取标题、作者、年份、引用次数、摘要、PDF链接等
  • 🚀 Stdio 传输: 支持标准输入输出方式调用
  • 🛡️ 反检测: 配置了反自动化检测机制

安装步骤

1. 克隆或下载项目

cd d:\MCP\google-scholar-search-py

2. 创建虚拟环境(推荐)

python -m venv venv
.\venv\Scripts\Activate.ps1

3. 安装依赖

pip install -r requirements.txt

4. 安装 Playwright 浏览器

playwright install chromium

使用方法

作为独立服务器运行

python server.py

在 MCP 客户端中配置

Claude Desktop 配置

编辑 %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "google-scholar": {
      "command": "python",
      "args": ["d:\\MCP\\google-scholar-search-py\\server.py"],
      "env": {}
    }
  }
}

或者使用虚拟环境:

{
  "mcpServers": {
    "google-scholar": {
      "command": "d:\\MCP\\google-scholar-search-py\\venv\\Scripts\\python.exe",
      "args": ["d:\\MCP\\google-scholar-search-py\\server.py"],
      "env": {}
    }
  }
}

Cline 配置

编辑 MCP 设置文件(通常在 VSCode 设置中):

{
  "mcpServers": {
    "google-scholar": {
      "command": "python",
      "args": ["d:\\MCP\\google-scholar-search-py\\server.py"],
      "disabled": false,
      "autoApprove": ["search_google_scholar", "get_article_details"]
    }
  }
}

可用工具

1. search_google_scholar

搜索 Google Scholar 上的学术文献。

参数:

  • query (str): 搜索关键词,例如 "machine learning"、"气候变化"
  • max_pages (int, 可选): 最多获取多少页结果(1-10,默认: 1)
  • results_per_page (int, 可选): 每页结果数(10 或 20,默认: 10)

返回:

{
  "query": "machine learning",
  "total_results": 20,
  "pages_searched": 2,
  "articles": [
    {
      "title": "文章标题",
      "authors": "作者1, 作者2",
      "year": "2023",
      "venue": "会议或期刊名称",
      "citations": 156,
      "snippet": "文章摘要或描述...",
      "link": "https://...",
      "pdf_link": "https://...pdf"
    }
  ]
}

使用示例:

请搜索关于"深度学习"的文献,获取前3页结果

2. get_article_details

根据文章标题搜索特定文献的详细信息。

参数:

  • article_title (str): 文章标题
  • max_results (int, 可选): 最多返回多少个匹配结果(1-10,默认: 5)

返回:
search_google_scholar 相同的格式

使用示例:

请查找论文 "Attention is All You Need" 的详细信息

工作原理

  1. 浏览器启动: 使用 Playwright 启动 Chromium 浏览器(无头模式)
  2. 反检测配置:
    • 移除 webdriver 标识
    • 设置真实的 User-Agent
    • 配置合理的浏览器窗口大小
  3. 页面导航: 构建 Google Scholar 搜索URL并访问
  4. 内容提取: 使用 CSS 选择器提取文章信息
  5. 翻页处理: 自动检测并访问下一页,支持多页搜索
  6. 结果返回: 将所有收集的数据整理并返回

常见问题

❓ 为什么只显示第一页的10条结果?

服务器功能是正常的! 如果您遇到这个问题,可能是以下原因:

  1. MCP 客户端的显示限制

    • 某些客户端可能截断显示长响应
    • 实际数据可能是完整的,只是UI没有完全显示
  2. 解决方案

    • ✅ 分批请求:"请搜索第1页" → "请搜索第2页" → "请搜索第3页"
    • ✅ 明确要求:"请返回所有结果,按页分组显示"
    • ✅ 检查客户端日志查看完整响应
  3. 验证服务器功能

    python test_pagination.py
    

    如果显示获取了多页结果,说明服务器正常。

📖 详细排查步骤请查看: TROUBLESHOOTING.md

项目结构

google-scholar-search-py/
├── server.py              # 主服务器文件
├── requirements.txt       # Python 依赖
├── pyproject.toml        # 项目配置
├── test_pagination.py    # 翻页功能测试
├── test_tool_output.py   # 工具返回测试
├── TROUBLESHOOTING.md    # 故障排除指南
├── .gitignore            # Git 忽略文件
├── README.md             # 本文档
└── mcp_config_example.json  # MCP 配置示例

注意事项

⚠️ 重要提示:

  1. 请求频率: Google Scholar 可能会限制请求频率,建议在页面之间添加延迟(已默认配置 2 秒)
  2. CAPTCHA: 如果遇到 CAPTCHA 验证,程序会自动停止并记录错误
  3. 结果数量: 建议一次不要获取过多页面(推荐 1-3 页)
  4. 网络环境: 需要能够访问 Google Scholar(可能需要代理)
  5. 合规使用: 请遵守 Google Scholar 的使用条款和机器人协议

故障排除

问题:无法启动浏览器

解决方案:

playwright install chromium

问题:找不到模块

解决方案:

pip install -r requirements.txt

问题:遇到 CAPTCHA

解决方案:

  • 增加页面之间的延迟时间
  • 减少一次搜索的页数
  • 使用代理或等待一段时间后再试

问题:无法访问 Google Scholar

解决方案:

  • 检查网络连接
  • 如果在中国大陆,可能需要配置代理
  • 可以修改代码添加代理支持

高级配置

添加代理支持

ScholarScraper.__aenter__ 方法中添加代理配置:

self.browser = await self.playwright.chromium.launch(
    headless=True,
    proxy={
        "server": "http://proxy-server:port",
        "username": "username",
        "password": "password"
    }
)

调整延迟时间

server.py 中修改 delay_between_pages 参数:

result = await scraper.search(
    query=query,
    max_pages=max_pages,
    results_per_page=results_per_page,
    delay_between_pages=3.0  # 增加到3秒
)

技术栈

  • FastMCP: MCP 服务器框架
  • Playwright: 浏览器自动化
  • Pydantic: 数据验证和序列化
  • Python: 3.10+

开发

运行测试

# 安装开发依赖
pip install -e ".[dev]"

# 运行测试
pytest

代码格式化

black server.py
ruff check server.py

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

更新日志

v0.1.0 (2025-11-08)

  • 初始版本
  • 实现基本搜索功能
  • 支持多页搜索
  • 添加反检测机制

相关 MCP 服务