网络爬虫服务器

一个生产就绪的MCP服务器,用于AI驱动的网页抓取,支持渐进式回退、浏览器自动化和Roo/VSCode集成。

  • by qxZap
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 qxZap/scraper-mcp

使用说明

MCP网络爬虫服务器

生产准备就绪 MCP(模型上下文协议) 用于人工智能网络抓取的服务器,具有渐进式回退、浏览器自动化和Roo/VCode集成。处理搜索、抓取、JS渲染、交互和全文转储。

🚀 特性

  • 渐进式倒退:HTTP/aiohttp→ 美丽汤→ 无头剧作家→ 头部(视觉)。
  • 搜索:谷歌/DuckDuckGo(API+抓取)。
  • 提取:Trafilatura用于干净、AI就绪的文本。
  • 浏览器自动化:导航、单击、键入、评估JS、截图、全文转储。
  • 并发:用于并行操作的异步信号量。
  • MCP本地:Roo/Claude/GPT代理的JSON-RPC工具。
  • 模块化: scraper-tools.py 用于安装在其他MCP服务器上。
  • 已测试:用于AFM、LinkedIn(JS)、UNEP爬行、交互的pytest套件。

🛠 工具(mcp-scraper mcp-tool_name)

工具 参数 描述 返回
search_query query, num_results=10 谷歌/DDG搜索 JSON {"urls": [...], "status": "success"}
search_multiple queries: list, max_concurrent=5 并发搜索 JSON列表
scrape_url url, max_retries=3 回退抓取 JSON {"content": clean text, "method_used": "..."}
scrape_multiple urls: list, max_concurrent=10 批量抓取 JSON列表
extract_content html, url? Trafilatura Clean str文本
browser_navigate url 无头导航 "Navigated to {url}. Preview: ..."
browser_navigate_headful url 可见浏览器 (验证码/调试) 相同+“窗口打开”
browser_click selector 点击元素 "Clicked {selector}"
browser_type selector, text, submit? 键入/发送密钥 "Typed {text}"
browser_evaluate script 运行JS(querySelector, innerText) "Eval result: {result}"
browser_screenshot name, selector? PNG base64 data:image/png;base64,...
browser_get_text - 正文(Trafilatura) str(约2000个字符)
browser_get_full_text - 完全转储: innerText +Traffilatura str(~4000个字符)
browser_close - 关闭会话 "Session closed"

⚙️ 设置

  1. 安装:

    pip install aiohttp beautifulsoup4 trafilatura fastmcp uvicorn playwright fastapi
    playwright install chromium
    
  2. 运行服务器 (端口8919):

    cd scraper-mcp
    python server.py
    
    • 健康: curl http://127.0.0.1:8919/health
    • MCP: http://127.0.0.1:8919/mcp
  3. Roo集成 (VSCode):

    • 增添 mcp_settings.json:
      "scraper-mcp": {"url": "http://127.0.0.1:8919/mcp"}
      
    • 使用 prompt.txt 作为代理的系统提示。
  4. 模块化安装 (例如,在另一个MCP上):

    from scraper_tools import mcp_tools
    mcp.mount(mcp_tools, prefix="scraper")  # scraper_search_query
    

🧪 测试

pytest tests/test_scraper.py -v
  • AFM刮擦(BS回退)。
  • LinkedIn JS(导航+全文)。
  • 谷歌互动(键入/点击/评估)。
  • 环境署爬行(搜索→ link → 验证)。
  • 通过核心;预计反机器人网站会超时。

📖 使用示例

命令行界面:

curl -X POST http://127.0.0.1:8919/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"scrape_url","arguments":{"url":"https://example.com"}},"id":1}'

代理提示 (prompt.txt):指南搜索→ 刮擦→ 互动→ dump.

交互式爬行:

  1. browser_navigate("https://www.unep.org/")
  2. browser_type("input[placeholder*='search']", "publications")
  3. browser_evaluate("document.querySelector('a[href*=\"publications\"]').href")
  4. browser_get_full_text() → 全部扔掉。

🔧 优化

  • 隐形:旋转UA/代理(扩展FallbackScraper)。
  • 规模:Docker+Redis会话。
  • 伦理:robots.txt,延迟。

🚀 未来增强功能/TODO

  • 代理旋转:集成Zyte API(ScrapingBee/Zyte智能代理)用于住宅IP,CAPTCHA旁路。
  • 木偶回退:Node.js Puppeteer集成,用于真正的浏览器指纹识别/隐形(通过子进程或混合服务器)。
  • 验证码求解器:2用于头部模式的捕获/反捕获服务钩。
  • 会话保持:Redis用于跨请求/实例共享浏览器上下文。
  • Docker/K8s:通过健康检查进行多容器缩放。
  • 先进隐形技术:浏览器指纹随机化,类人鼠标/打字曲线。
  • PDF提取:pdfplumber/PyMuPDF用于文档抓取。
  • 视觉AI:截图OCR(Tesseract/PaddleOCR)+LLM布局分析。
  • 履带式发动机:链接发现、站点地图解析、深度受限蜘蛛。

问题?登录终端。通过PR贡献!