网络爬虫MCP服务器
一个MCP(模型上下文协议)服务器,可以抓取网页并提取 内容使用CSS选择器。使用deno-dom构建,用于快速HTML解析。
为什么
大多数LLM客户端已经具有一些HTTP获取功能,但获取 页面直接返回往往会返回大量不必要的内容。这不仅令人困惑 LLM不仅可以快速填充上下文窗口。
这就是MCP发挥作用的地方——它使用CSS选择器实现了有针对性的抓取, 所以你只提取你真正需要的内容。
Zed的例子
特性
- 🌐 通过URL获取任何可公开访问的网页
- 🔍 使用快速deno-dom库解析HTML内容
- 📋 使用标准CSS选择器提取文本内容
- 🎯 支持复杂选择器(类、ID、属性、伪选择器)
- ⚡ 针对网络问题和解析失败的内置错误处理
- 🛡️ 安全执行,所需权限最少
先决条件
- 德诺 安装在您的系统上
- 获取网页的网络访问
运行服务器
deno run --allow-net jsr:@sigma/scrap-mcp您还可以使用Bun和Node.js运行此程序 bunx 和 npx 分别为:
bunx rjsr @sigma/scrap-mcpnpx rjsr @sigma/scrap-mcpMCP工具参考
scrape_page
抓取网页和提取内容的主要工具。
参数:
url(string,必填):要抓取的页面的URLquery_selector(string,必填):查询元素的CSS选择器
返回格式:
Found X elements matching selector "SELECTOR" on URL:
Element 1: TEXT_CONTENT
Element 2: TEXT_CONTENT
...使用示例
基本选择器
- 摘录所有标题:
{
"url": "https://example.com",
"query_selector": "h1, h2, h3"
}- 摘录所有段落:
{
"url": "https://example.com",
"query_selector": "p"
}- 从特定类中提取内容:
{
"url": "https://news.ycombinator.com",
"query_selector": ".titleline > a"
}- 提取所有链接:
{
"url": "https://example.com",
"query_selector": "a"
}高级选择器
- 提取导航项:
{
"url": "https://deno.land",
"query_selector": "nav a"
}- 提取具有特定属性的元素:
{
"url": "https://example.com",
"query_selector": "a[href^='https://']"
}- 提取表单输入:
{
"url": "https://example.com",
"query_selector": "input[type='text'], input[type='email']"
}CSS选择器参考
基本选择器
h1-所有H1标题.className-所有具有类“className”的元素#elementId-ID为“elementId”的元素*-所有元素
选择符
div p-div元素内的所有段落div > p-div元素的直接段落子元素h1 + p-紧接H1元素之后的段落h1 ~ p-H1元素后的所有兄弟段落
属性选择器
[href]-所有具有href属性的元素a[title]-所有具有标题属性的链接a[href^="https://"]-以“https://”开头的链接a[href$=".pdf"]-以“.pdf”结尾的链接a[href*="github"]-包含“github”的链接
伪选择器
li:first-child-第一个列表项li:last-child-最后一个列表项li:nth-child(2n)-偶数列表项p:not(.special)-没有“特殊”类别的段落
复杂示例
.article-content p, .article-content h2-条款中的段落和H2
内容
nav ul li a-导航链接table tr:nth-child(odd) td-奇数表行中的单元格form input[required]-所需的表单输入
依赖项
@modelcontextprotocol/sdk@1.8.0-用于服务器实现的MCP SDK@b-fuze/deno-dom@^0.1.49-HTML内容的快速DOM解析器zod@3.24.2-运行时类型验证和模式定义
错误处理
服务器为以下内容提供全面的错误处理:
- 网络问题:URL无效、连接超时、DNS故障
- HTTP错误:404未找到、403禁止、500服务器错误等。
- 解析失败:HTML格式错误,编码问题
- 选择器问题:CSS选择器无效,没有匹配的元素
- 内容问题:找到元素,但没有可用的文本内容
所有错误都通过MCP协议以可读文本消息的形式返回。
最佳实践
- 尊重robots.txt:始终检查目标网站的robots.txt文件
- 增加延迟:在请求之间使用合理的延迟,以避免压倒性的
服务器
- 用户代理:scraper使用Deno的默认用户代理
安全
必需的权限
--allow-net-从互联网获取网页
安全功能
- 无任意代码执行:只接受CSS选择器,不接受
JavaScript
- 网络沙盒:只允许出站HTTP/HTTPS请求
- 输入验证:使用Zod模式验证所有输入
故障排除
“权限被拒绝”错误:
# Ensure all required permissions are granted
deno run --allow-net jsr:@sigma/scrap-mcp“未找到具有有效选择器的元素”:
- 页面可能会使用JavaScript动态加载内容
- 尝试不同的选择器或检查实际的HTML源代码
- 一些网站阻止自动请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件
