网页内容抓取服务

Fetcher MCP是一个基于Playwright无头浏览器的网页内容抓取服务,支持JavaScript执行、智能内容提取和多种输出格式,适用于动态网页内容采集和批量处理。

  • by jae-jae
  • TypeScript
  • 本地部署
  • 1088 星标
  • 更新于
在 GitHub 查看 jae-jae/fetcher-mcp

使用说明

中文 | 德语 | 西班牙语 | 法语 | 日语 | 韩语 | 葡萄牙语 | 俄语

Fetcher MCP

使用Playwright无头浏览器的MCP服务器来抓取网页内容。

🌟 推荐: OllaMan(注:这个名称可能是特定文化或语境下的专有名词,直接翻译为中文可能无法准确传达其含义,因此保持原样。若该名称有特定含义或背景,请根据具体情况进行翻译。) - 强大的Ollama AI模型管理器。

优点;优势

  • JavaScript 支持与传统的网页抓取工具不同,Fetcher MCP 使用 Playwright 来执行 JavaScript,使其能够处理动态网页内容和现代网页应用。

  • 智能内容提取内置的可读性算法能够自动从网页中提取主要内容,去除广告、导航和其他非必要元素。

  • 灵活的输出格式支持HTML和Markdown两种输出格式,便于与各种下游应用程序集成。

  • 并行处理这个(或:那个) fetch_urls 该工具支持同时抓取多个URL,极大地提高了批量操作的效率。

  • 资源优化自动阻止不必要的资源(图片、样式表、字体、媒体)以减少带宽使用并提高性能。

  • 健壮的错误处理全面的错误处理和日志记录功能确保即使在处理有问题的网页时也能保持可靠运行。

  • 可配置参数对超时、内容提取和输出格式进行精细控制,以适应不同的使用场景。

快速入门

直接使用 npx 运行:

npx -y fetcher-mcp

首次设置 - 在终端中运行以下命令安装所需的浏览器:

npx playwright install chromium

HTTP和SSE传输

使用 --transport=http 参数用于同时启动可流式传输的HTTP端点和SSE端点服务:

npx -y fetcher-mcp --log --transport=http --host=0.0.0.0 --port=3000

启动后,服务器提供以下端点:

  • /mcp - 可流式传输的HTTP端点(现代MCP协议)
  • /sse - SSE 端点(旧版 MCP 协议)

客户可以根据自己的需求选择连接方式。

调试模式

与……一起奔跑 --debug 用于调试的显示浏览器窗口选项:

npx -y fetcher-mcp --debug

配置MCP(多控制器协议/模块,具体含义根据上下文确定)

在Claude Desktop中配置此MCP服务器:

在MacOS上: ~/Library/Application Support/Claude/claude_desktop_config.json

在Windows上: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "fetcher": {
      "command": "npx",
      "args": ["-y", "fetcher-mcp"]
    }
  }
}

Docker 部署

使用 Docker 运行

docker run -p 3000:3000 ghcr.io/jae-jae/fetcher-mcp:latest

使用 Docker Compose 进行部署

创建一个 docker-compose.yml 文件:

version: "3.8"

services:
  fetcher-mcp:
    image: ghcr.io/jae-jae/fetcher-mcp:latest
    container_name: fetcher-mcp
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    # Using host network mode on Linux hosts can improve browser access efficiency
    # network_mode: "host"
    volumes:
      # For Playwright, may need to share certain system paths
      - /tmp:/tmp
    # Health check
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3

然后运行:

docker-compose up -d

特点/特性

  • fetch_url - 从指定的URL检索网页内容

    • 使用Playwright无头浏览器解析JavaScript
    • 支持智能提取主要内容并转换为Markdown格式
    • 支持以下参数:
      • url要获取的网页的URL(必填参数)
      • timeout页面加载超时时间,单位为毫秒,默认值为30000(30秒)
      • waitUntil指定导航何时被视为完成,选项包括:'load'(加载完成)、'domcontentloaded'(DOM内容加载完成)、'networkidle'(网络空闲)、'commit'(提交完成),默认值为 'load'
      • extractContent是否智能提取主要内容,默认为是
      • maxLength返回内容的最大长度(以字符计),默认无限制
      • returnHtml是否返回HTML内容而非Markdown,默认为false
      • waitForNavigation是否在初始页面加载后等待额外的导航(对于带有反机器人验证的网站很有用),默认值为false
      • navigationTimeout等待额外导航的最大时间(毫秒),默认值为10000(10秒)
      • disableMedia是否禁用媒体资源(图像、样式表、字体、媒体),默认值为true
      • debug是否启用调试模式(显示浏览器窗口),如果指定了此选项,则会覆盖 --debug 命令行标志
  • fetch_urls - 并行批量从多个URL检索网页内容

    • 采用多标签并行获取以提高性能
    • 返回合并后的结果,网页之间有清晰的分隔
    • 支持以下参数:
      • urls要获取的URL数组(必填参数)
      • 其他参数与……相同 fetch_url
  • browser_install - 自动安装Playwright Chromium浏览器二进制文件

    • 在未安装所需Chromium浏览器二进制文件时进行安装
    • 当浏览器安装出错时自动建议
    • 支持以下参数:
      • withDeps安装Chromium浏览器所需的系统依赖,默认为否
      • force即使Chromium已安装,也强制安装(默认为false)

小贴士

处理特殊网站场景

应对反爬虫机制

  • 等待完全加载对于使用验证码、重定向或其他验证机制的网站,请在您的提示中包含:

    Please wait for the page to fully load
    

    这将使用 waitForNavigation: true 参数。

  • 增加超时持续时间对于加载缓慢的网站:

    Please set the page loading timeout to 60 seconds
    

    这会同时调整两者 timeout 并且 navigationTimeout 相应地调整参数。

内容检索调整

  • 保持原始HTML结构内容提取可能失败的情况:

    Please preserve the original HTML content
    

    集合(或套装) extractContent: false 并且 returnHtml: true。

  • 获取完整页面内容当提取的内容过于有限时:

    Please fetch the complete webpage content instead of just the main content
    

    集合(或套装) extractContent: false。

  • 以HTML格式返回内容当需要使用HTML格式而非默认的Markdown格式时:

    Please return the content in HTML format
    

    集合 returnHtml: true。

调试与认证

启用调试模式

  • 动态调试激活在特定的获取操作期间显示浏览器窗口:
    Please enable debug mode for this fetch operation
    
    这设定为 debug: true 即使服务器是在未(进行某操作/安装某组件)的情况下启动的 --debug 旗帜。

使用自定义Cookie进行身份验证

  • 手动登录使用您自己的凭据登录:

    Please run in debug mode so I can manually log in to the website
    

    集合(或套装) debug: true 或者使用 --debug 标志,保持浏览器窗口开启以便手动登录。

  • 与调试浏览器交互当启用调试模式时:

    1. 浏览器窗口保持打开状态
    2. 您可以使用您的凭据手动登录该网站
    3. 登录完成后,将使用您的已验证会话获取内容
  • 为特定请求启用调试即使服务器已经在运行,你也可以为特定请求启用调试模式:

    Please enable debug mode for this authentication step
    

    集合(或套装) debug: true 仅针对此特定请求,打开浏览器窗口以便手动登录。

发展

安装依赖项

npm install

安装 Playwright 浏览器

安装Playwright所需的浏览器:

npm run install-browser

构建服务器

npm run build

调试

使用MCP Inspector进行调试:

npm run inspector

你也可以启用可见浏览器模式进行调试:

node build/index.js --debug

相关项目

许可证

根据(以下)许可协议授权 麻省理工学院许可证(MIT License)