🚀 Web-curl:网页内容抓取与提取工具
Web-curl 是一款功能强大的工具,可用于从网页和 API 中获取并提取文本内容。你既可以将其作为独立的命令行工具使用,也能将其作为 MCP(模型上下文协议)服务器来运行。它借助 Puppeteer 实现强大的网页抓取功能,还支持资源阻塞、自定义请求头、身份验证以及谷歌自定义搜索等高级特性。
🚀 快速开始
安装
git clone <repository-url>
cd web-curl
npm install
npm run build
Puppeteer 安装说明
使用
CLI 使用
CLI 支持从网页中获取并提取文本内容。
node build/index.js https://example.com
node build/index.js --timeout 30000 --no-block-resources https://example.com
node build/index.js -o result.json https://example.com
命令行选项
--timeout <ms>
:设置导航超时时间(默认值:60000)
--no-block-resources
:禁用对图片、样式表和字体的阻塞
-o <file>
:将结果输出到指定文件
MCP 服务器使用
Web-curl 可以作为 MCP 服务器运行,以便与 Roo Code 或其他支持 MCP 的平台集成。
npm run start
服务器通过标准输入输出进行通信,并公开了在 中定义的工具。
MCP 工具示例(fetch_webpage)
{
"name": "fetch_webpage",
"arguments": {
"url": "https://example.com",
"blockResources": true,
"timeout": 60000,
"maxLength": 10000
}
}
谷歌搜索集成
为谷歌自定义搜索设置以下环境变量:
APIKEY_GOOGLE_SEARCH
:你的谷歌 API 密钥
CX_GOOGLE_SEARCH
:你的自定义搜索引擎 ID
✨ 主要特性
- 🔎 从任何网站检索文本内容。
- 🚫 阻塞不必要的资源(图片、样式表、字体)以加快加载速度。
- ⏱️ 设置导航超时时间和内容提取限制。
- 💾 将结果输出到标准输出或保存到文件。
- 🖥️ 既可以作为 CLI 工具使用,也可以作为 MCP 服务器使用。
- 🌐 使用自定义方法、请求头和请求体进行 REST API 请求。
- 🔍 集成谷歌自定义搜索(需要 API 密钥和 CX)。
- 🤖 智能命令解析(自动检测 URL 和搜索查询)。
- 🛡️ 详细的错误日志记录和强大的错误处理功能。
🏗️ 架构
- CLI 与 MCP 服务器:
实现了 CLI 入口点和 MCP 服务器,公开了诸如 fetch_webpage
、fetch_api
、google_search
和 smart_command
等工具。
- 网页抓取:使用 Puppeteer 进行无头浏览、资源阻塞和内容提取。
- REST 客户端:
提供了一个灵活的 HTTP 客户端,用于 API 请求,CLI 和 MCP 工具均可使用。
- 配置:通过 CLI 选项、环境变量和工具参数进行管理。
📦 安装指南
克隆仓库
git clone <repository-url>
cd web-curl
安装依赖
npm install
构建项目
npm run build
💻 使用示例
基础用法
从网页获取文本内容
node build/index.js https://example.com
MCP 工具示例(fetch_webpage)
{
"name": "fetch_webpage",
"arguments": {
"url": "https://example.com",
"blockResources": true,
"timeout": 60000,
"maxLength": 10000
}
}
高级用法
带选项获取网页内容
node build/index.js --timeout 30000 --no-block-resources https://example.com
进行 REST API 请求
{
"name": "fetch_api",
"arguments": {
"url": "https://api.github.com/repos/nodejs/node",
"method": "GET",
"headers": {
"Accept": "application/vnd.github.v3+json"
}
}
}
谷歌搜索
{
"name": "google_search",
"arguments": {
"query": "web scraping best practices",
"num": 5
}
}
📚 详细文档
配置
- 资源阻塞:阻塞图片、样式表和字体,以加快抓取速度。
- 超时设置:设置导航和 API 请求的超时时间。
- 自定义请求头:在高级场景中传递自定义 HTTP 请求头。
- 身份验证:支持通过用户名/密码进行 HTTP 基本身份验证。
- 环境变量:用于谷歌搜索 API 集成。
谷歌自定义搜索 API
谷歌自定义搜索 API 是免费的,但有使用限制(例如,免费用户每天可进行 100 次查询,额外查询需要付费)。有关配额、定价和限制的完整详细信息,请参阅 官方文档。
如何获取谷歌 API 密钥和 CX
- 获取谷歌 API 密钥:
- 访问 谷歌云控制台。
- 创建/选择一个项目,然后转到 API 和服务 > 凭据。
- 点击 创建凭据 > API 密钥 并复制它。
- 获取自定义搜索引擎(CX)ID:
- 启用自定义搜索 API:
- 在谷歌云控制台中,转到 API 和服务 > 库。
- 搜索 自定义搜索 API 并启用它。
将上述配置中的
YOUR_GOOGLE_API_KEY
和 YOUR_CX_ID
替换为你自己的值。
🛠️ 故障排除
- 超时错误:如果请求超时,请增加
timeout
参数的值。
- 内容被阻塞:如果内容缺失,请尝试禁用资源阻塞或调整
resourceTypesToBlock
。
- 谷歌搜索失败:确保在你的环境中设置了
APIKEY_GOOGLE_SEARCH
和 CX_GOOGLE_SEARCH
。
- 二进制/未知内容:非文本响应将进行 base64 编码。
- 错误日志:查看
logs/error-log.txt
文件以获取详细的错误信息。
🧠 使用建议
点击查看高级提示
- 除非你需要图片或样式,否则使用资源阻塞功能以实现更快、更轻量级的抓取。
- 对于大型页面,使用
maxLength
和 startIndex
对内容提取进行分页。
- 始终验证你的工具参数,以避免出现错误。
- 使用环境变量保护你的 API 密钥和敏感数据。
- 查看 中的 MCP 工具模式,了解所有可用选项。
🤝 贡献与问题反馈
欢迎贡献代码!如果你想贡献代码,请 Fork 此仓库并提交 Pull Request。
如果你发现任何问题或有建议,请在仓库页面上提交 Issue。
📄 许可证
本项目由 Rayss 开发。
如有问题、改进建议或贡献代码,请联系作者或在仓库中提交 Issue。
🎬 演示视频
点击直接在浏览器中观看演示
演示视频 (MP4)
⚠️ 重要提示
谷歌搜索 API 是免费的,但有使用限制。详情请参阅:谷歌自定义搜索 API 概述
由 Rayss 开发
🚀 开源项目
🛠️ 使用 Node.js 和 TypeScript 构建(需要 Node.js v18+)

📚 目录
- 概述
- 特性
- 架构
- 安装
- 使用
- 配置
- 示例
- 故障排除
- 提示与最佳实践
- 贡献与问题反馈
- 许可证与归属