WaterCrawl 是一个强大的开源网页爬虫工具,旨在帮助用户从网页中提取数据并将其转化为适合大语言模型(LLM)处理的数据格式。它基于 Python 开发,结合 Django、Scrapy 和 Celery 技术,支持高效的网页爬取和数据处理。WaterCrawl 提供多种语言的 SDK,包括 Node.js、Go 和 PHP,方便开发者集成到不同项目中。用户可以通过 Docker 快速部署,或者使用提供的 API 进行自定义开发。它的设计目标是简化网页数据提取流程,适合需要处理大量网页内容的开发者和企业。
功能列表
- 高效网页爬取:支持自定义爬取深度、速度和目标内容,快速获取网页数据。
- 数据提取与清洗:自动过滤无关标签(如脚本、样式),提取主要内容并支持多种输出格式(如 JSON、Markdown)。
- 多语言 SDK 支持:提供 Node.js、Go、PHP 和 Python 的 SDK,满足不同开发需求。
- 实时进度监控:通过 Celery 提供爬取任务的实时状态更新。
- Docker 部署支持:使用 Docker Compose 快速搭建本地或生产环境。
- MinIO 集成:支持文件存储和下载,适合处理大规模数据。
- 插件扩展:提供插件框架,允许开发者自定义爬取和处理逻辑。
- API 集成:支持通过 API 管理爬取任务、获取结果或下载数据。
使用帮助
WaterCrawl 的安装和使用主要面向开发者和技术团队,适合熟悉 Python 和 Docker 的用户。以下是详细的安装和使用流程。
安装流程
- 克隆仓库
首先,克隆 WaterCrawl 的 GitHub 仓库到本地:git clone https://github.com/watercrawl/watercrawl.git cd watercrawl
这会下载 WaterCrawl 的源代码到你的本地环境。
- 安装 Docker
确保你的系统中已安装 Docker 和 Docker Compose。如果没有,请访问 Docker 官方网站 下载并安装。 - 配置环境变量
进入docker
目录,复制示例环境配置文件:cd docker cp .env.example .env
编辑
.env
文件,配置必要的参数,例如数据库连接、MinIO 存储地址等。如果部署在非本地环境(如云服务器),必须更新 MinIO 配置:MINIO_EXTERNAL_ENDPOINT=your-domain.com MINIO_BROWSER_REDIRECT_URL=http://your-domain.com/minio-console/ MINIO_SERVER_URL=http://your-domain.com/
这些设置确保文件上传和下载功能正常工作。更多配置详情可参考
DEPLOYMENT.md
文件。 - 启动 Docker 容器
使用 Docker Compose 启动服务:docker compose up -d
这会启动 WaterCrawl 的核心服务,包括 Django 后端、Scrapy 爬虫和 MinIO 存储。
- 访问应用
打开浏览器,访问http://localhost
检查服务是否运行正常。如果部署在远程服务器,替换localhost
为你的域名或 IP 地址。
功能操作流程
WaterCrawl 的核心功能是网页爬取和数据提取,以下是主要功能的详细操作步骤。
网页爬取
WaterCrawl 使用 Scrapy 框架进行网页爬取,用户可以通过 API 或命令行发起爬取任务。例如,发起一个爬取任务:
{
"url": "https://example.com",
"pageOptions": {
"exclude_tags": ["script", "style"],
"include_tags": ["p", "h1", "h2"],
"wait_time": 1000,
"only_main_content": true,
"include_links": true,
"timeout": 15000
},
"sync": true,
"download": true
}
- 参数说明:
exclude_tags
:过滤掉指定的 HTML 标签(如脚本和样式)。include_tags
:仅提取指定的标签内容。only_main_content
:只提取网页的主要内容,忽略侧边栏、广告等。include_links
:是否包含页面中的链接。timeout
:设置爬取超时时间(毫秒)。
- 操作步骤:
- 使用 SDK(如 Python 或 Node.js)或直接通过 API 发送上述 JSON 请求。
- WaterCrawl 会返回爬取结果,包含提取的文本、链接或其他指定数据。
- 结果可以保存为 JSON、Markdown 或其他格式。
数据下载
WaterCrawl 支持将爬取结果保存为文件。例如,下载站点地图:
{
"crawlRequestId": "uuid-of-crawl-request",
"format": "json"
}
- 操作步骤:
- 获取爬取任务的 ID(通过 API 或任务列表查看)。
- 使用 API 发送下载请求,指定输出格式(如 JSON、Markdown)。
- 下载的文件会存储在 MinIO 中,访问 MinIO 控制台即可获取。
实时监控
WaterCrawl 使用 Celery 提供任务状态监控。用户可以通过 API 查询任务进度:
curl https://app.watercrawl.dev/api/tasks/<task_id>
返回的任务状态包括“进行中”、“完成”或“失败”,帮助用户实时掌握爬取进度。
插件开发
WaterCrawl 支持插件扩展,开发者可以基于提供的 Python 插件框架创建自定义功能:
- 安装
watercrawl-plugin
包:pip install watercrawl-plugin
- 使用提供的抽象类和接口开发插件,定义爬取逻辑或数据处理流程。
- 将插件集成到 WaterCrawl 主程序中,运行自定义任务。
注意事项
- 如果部署在生产环境,确保更新
.env
文件中的数据库和 MinIO 配置,否则可能导致文件上传或下载失败。 - 避免在 GitHub 公开讨论安全问题,相关问题请发送至
support@watercrawl.dev
。 - 建议定期检查 WaterCrawl 的 GitHub 仓库,获取最新更新和修复。
应用场景
- 大模型数据准备
开发者需要为大语言模型提供高质量的训练数据。WaterCrawl 可以快速从目标网站爬取文本内容,清洗无关数据,输出结构化的 JSON 或 Markdown 文件,适合直接用于模型训练。 - 市场研究
企业需要分析竞争对手的网站内容或行业动态。WaterCrawl 能批量爬取目标网页,提取关键信息(如产品描述、价格、新闻),帮助企业快速汇总市场数据。 - 内容聚合
新闻或博客平台需要从多个网站收集文章。WaterCrawl 支持自定义爬取规则,自动提取文章标题、正文和链接,生成统一格式的内容库。 - SEO 优化
SEO 专家可以使用 WaterCrawl 爬取网站地图和页面链接,分析网站结构和内容分布,优化搜索引擎排名。
QA
- WaterCrawl 支持哪些编程语言的 SDK?
WaterCrawl 提供 Node.js、Go、PHP 和 Python 的 SDK,覆盖多种开发场景。每个 SDK 都支持完整的 API 功能,方便集成。 - 如何处理爬取任务失败?
检查任务状态,确认是否因超时或网络问题失败。调整timeout
参数或检查目标网站的反爬机制。必要时联系support@watercrawl.dev
。 - 是否支持非技术用户?
WaterCrawl 主要面向开发者,需具备 Python 或 Docker 基础。非技术用户可能需要技术团队协助部署和使用。 - 如何扩展 WaterCrawl 的功能?
使用watercrawl-plugin
包开发自定义插件,定义特定的爬取或数据处理逻辑,集成到主程序中运行。