WaterCrawl:强大的网页抓取与数据提取工具

在当今数字化的时代,数据就如同宝藏一般,而如何有效地从海量的网页中抓取和提取相关数据,成为了许多人关注的问题。WaterCrawl 就是这样一款强大的网页应用程序,它利用 Python、Django、Scrapy 和 Celery 等技术,能够帮助我们高效地完成网页抓取和数据提取的任务。接下来,我们就来详细了解一下 WaterCrawl 的相关内容。

一、WaterCrawl 简介

WaterCrawl 是一个功能强大的网页应用程序,它就像是一个勤劳的小蜘蛛,能够在互联网的海洋中快速地爬行,抓取网页并提取出我们需要的相关数据。这个程序结合了 Python、Django、Scrapy 和 Celery 等多种技术,为我们提供了一个高效、稳定的网页抓取和数据提取解决方案。

1.1 产品优势

WaterCrawl 具有很多令人瞩目的优势,让我们一起来看看:

  • 先进的网页抓取与数据提取:它可以对网站进行深度抓取,并且提供了高度可定制的选项,我们可以根据自己的需求灵活调整抓取的深度、速度,还能精确地定位到我们想要的特定内容。
  • 强大的搜索引擎:提供了多种搜索深度选项,包括基本、高级和终极搜索,能够帮助我们在广阔的网络世界中快速找到相关内容。
  • 多语言支持:支持多种语言,我们可以使用不同的语言进行搜索和抓取,并且还能进行国家特定的内容定位,满足不同地区和语言的需求。
  • 异步处理:通过 Server – Sent Events(SSE)技术,我们可以实时监控抓取和搜索的进度,就像看着小蜘蛛在网页上忙碌的身影一样,一切都在我们的掌控之中。
  • 全面的 REST API:拥有详细的文档和客户端库,方便开发者进行集成和二次开发,无论是与其他系统对接还是开发新的应用,都变得非常轻松。
  • 丰富的生态系统:与 Dify、N8N 等 AI/自动化平台进行了集成,还提供了多种插件,如 WaterCrawl 插件和 OpenAI 插件,为我们的使用提供了更多的可能性。
  • 自托管与开源:我们可以完全掌控自己的数据,并且它提供了简单的部署选项,让我们能够轻松地将其部署到自己的服务器上。
  • 高级结果处理:支持下载和处理搜索结果,并且可以根据我们的需求自定义参数,方便我们对数据进行进一步的分析和利用。

1.2 客户端 SDK 和集成情况

WaterCrawl 提供了多种客户端 SDK,方便不同编程语言的开发者使用:

  • Python 客户端:是一个功能齐全的 SDK,支持所有 API 端点,对于 Python 开发者来说,使用起来非常方便。
  • Node.js 客户端:实现了完整的 JavaScript/TypeScript 集成,让 Node.js 开发者也能轻松地使用 WaterCrawl 的功能。
  • Go 客户端:同样是功能强大的 SDK,支持所有 API 端点,满足 Go 语言开发者的需求。
  • PHP 客户端:为 PHP 开发者提供了支持,让他们也能利用 WaterCrawl 进行网页抓取和数据提取。
  • Rust 客户端:虽然还在开发中,但值得期待,相信未来会为 Rust 开发者带来便利。

此外,WaterCrawl 还与多个平台进行了集成:

  • Dify 插件:可以在 Dify 平台上使用,其源代码也公开在 GitHub 上,方便开发者进行查看和修改。
  • N8N 工作流节点:在 N8N 平台上有对应的工作流节点,并且也公开了源代码,便于开发者进行定制。
  • Dify 知识库:与 Dify 的知识库进行了集成,为我们提供了更多的知识支持。
  • Langflow:目前有相关的 Pull Request,但还未合并。
  • Flowise:即将推出相关集成,值得期待。

二、WaterCrawl 的快速启动

2.1 本地 Docker 环境下的快速启动

如果你想在本地的 Docker 环境下快速启动 WaterCrawl,可以按照以下步骤进行操作:

  1. 克隆仓库:打开终端,运行以下命令克隆 WaterCrawl 的仓库:
git clone https://github.com/watercrawl/watercrawl.git
cd watercrawl

这一步就像是把 WaterCrawl 的代码从云端搬运到了我们的本地电脑上。

  1. 构建和运行 Docker 容器:继续在终端中执行以下命令:
cd docker
cp .env.example .env
docker compose up -d

这里的 cp .env.example .env 是将示例环境文件复制为实际使用的环境文件,而 docker compose up -d 则是启动 Docker 容器,让 WaterCrawl 开始运行。

  1. 访问应用程序:打开浏览器,访问 http://localhost,就可以看到 WaterCrawl 的界面啦。

2.2 重要提示

如果你不是在本地的 localhost 环境下部署,而是在其他域名或 IP 地址上部署,那么一定要更新 .env 文件中的 MinIO 配置:

# Change this from 'localhost' to your actual domain or IP
MINIO_EXTERNAL_ENDPOINT=your - domain.com

# Also update these URLs accordingly
MINIO_BROWSER_REDIRECT_URL=http://your - domain.com/minio - console/
MINIO_SERVER_URL=http://your - domain.com/

如果不更新这些设置,文件的上传和下载功能可能会出现问题。更多详细信息可以参考 DEPLOYMENT.md

在部署到生产环境之前,我们还需要确保更新 .env 文件中的配置值,并且设置和配置好数据库、MinIO 等所需的服务。具体的操作可以阅读 Deployment Guide

三、WaterCrawl 的部署指南

3.1 部署前的准备工作

在部署 WaterCrawl 之前,我们需要确保已经安装了以下软件:

  • Docker Engine(20.10.0+):Docker 是一种容器化技术,能够帮助我们快速部署和管理应用程序。
  • Docker Compose(2.0.0+):Docker Compose 可以让我们通过一个配置文件来定义和运行多个 Docker 容器,方便我们进行应用程序的部署。
  • Git:用于克隆 WaterCrawl 的代码仓库。

3.2 环境配置

WaterCrawl 使用环境变量来进行配置,所有的变量在 docker - compose.yml 中都有默认值,但我们也可以在 .env 文件中进行覆盖。下面我们来详细了解一下不同方面的环境配置。

3.2.1 通用设置

通用设置主要控制基本的 Docker 和版本信息,具体如下:

变量 描述 默认值 是否必需
VERSION 应用程序版本 v0.8.0
NGINX_PORT Nginx 服务的端口 80

设置步骤如下:

  1. 首先确定我们要将应用程序暴露在哪个端口上。
  2. 如果端口 80 已经被其他程序占用,可以将 NGINX_PORT 修改为其他值,比如 8080。

3.2.2 Django 核心设置

这些设置主要控制 Django 后端应用程序,具体如下:

变量 描述 默认值 是否必需
SECRET_KEY Django 安全密钥 长字符串 生产环境必需
API_ENCRYPTION_KEY API 加密密钥 长字符串 生产环境必需
DEBUG 调试模式(生产环境设置为 False) True
ALLOWED_HOSTS 允许的主机列表,用逗号分隔 *
LANGUAGE_CODE 语言代码 en - us
TIME_ZONE 时区 UTC
USE_I18N 启用国际化 True
USE_TZ 启用时区支持 True
STATIC_ROOT 静态文件目录 storage/static/
MEDIA_ROOT 媒体文件目录 storage/media/
LOG_LEVEL 日志级别 INFO
FRONTEND_URL 前端 URL,用于 CORS 和重定向 http://localhost

设置步骤如下:

  1. 在生产环境中,我们需要生成一个安全的随机 SECRET_KEY,可以使用以下命令:
openssl rand -base64 32
  1. DEBUG 设置为 False,以提高生产环境的安全性。
  2. ALLOWED_HOSTS 设置为我们的域名,例如 example.com,www.example.com
  3. 根据我们所在的地区,将 TIME_ZONE 设置为本地时区,比如 Europe/Berlin
  4. FRONTEND_URL 设置为我们的前端域名,用于电子邮件链接和重定向。

3.2.3 数据库设置

数据库设置主要控制 PostgreSQL 数据库,具体如下:

变量 描述 默认值 是否必需
POSTGRES_HOST PostgreSQL 主机 db
POSTGRES_PORT PostgreSQL 端口 5432
POSTGRES_PASSWORD PostgreSQL 密码 postgres 生产环境必需
POSTGRES_USER PostgreSQL 用户名 postgres
POSTGRES_DB PostgreSQL 数据库名称 postgres

设置步骤如下:

  1. 在生产环境中,我们需要设置一个强密码作为 POSTGRES_PASSWORD,以保证数据库的安全性。
  2. 默认值已经配置好,可以与包含的 PostgreSQL 容器一起工作。

3.2.4 Redis 设置

Redis 设置主要控制 Redis 用于缓存和任务队列,具体如下:

变量 描述 默认值 是否必需
CELERY_BROKER_URL Celery 代理的 Redis URL redis://redis:6379/0
REDIS_LOCKER_URL Django 缓存/锁的 Redis URL redis://redis:6379/3
CELERY_RESULT_BACKEND Celery 结果后端 django - db

设置步骤如下:

  1. 默认值与捆绑的 Redis 服务配合良好。
  2. 只有在使用外部 Redis 服务器时,才需要更改这些设置。

3.2.5 JWT 设置

JWT 设置主要控制 JSON Web Token 认证,具体如下:

变量 描述 默认值 是否必需
ACCESS_TOKEN_LIFETIME_MINUTES JWT 访问令牌的有效期(分钟) 5
REFRESH_TOKEN_LIFETIME_DAYS JWT 刷新令牌的有效期(天) 30

设置步骤如下:

  1. 根据我们的安全需求,调整令牌的有效期。
  2. 在更安全的环境中,可以考虑缩短令牌的有效期。

3.2.6 MinIO 设置

MinIO 设置主要控制 MinIO 对象存储(S3 兼容),具体如下:

变量 描述 默认值 是否必需
MINIO_ENDPOINT Django 的 MinIO 端点 minio:9000
MINIO_EXTERNAL_ENDPOINT 外部 MinIO 端点 localhost 生产环境必需
MINIO_REGION MinIO 区域(可选) us - east - 1
MINIO_ACCESS_KEY MinIO 访问密钥(用户名) minio 生产环境必需
MINIO_SECRET_KEY MinIO 秘密密钥(密码) minio123 生产环境必需
MINIO_USE_HTTPS 是否使用 HTTPS 访问 MinIO False
MINIO_EXTERNAL_ENDPOINT_USE_HTTPS 外部端点是否使用 HTTPS False
MINIO_URL_EXPIRY_HOURS MinIO URL 的有效期(小时) 7
MINIO_CONSISTENCY_CHECK_ON_START 启动时是否检查一致性 True
MINIO_PRIVATE_BUCKET 私有存储桶名称 private
MINIO_PUBLIC_BUCKET 公共存储桶名称 public
MINIO_BUCKET_CHECK_ON_SAVE 保存时是否检查存储桶存在性 False
MINIO_BROWSER_REDIRECT_URL MinIO 浏览器重定向 URL http://localhost/minio - console/
MINIO_SERVER_URL MinIO 服务器 URL http://localhost/

设置步骤如下:

  1. 在生产环境中,设置强密码作为 MINIO_ACCESS_KEYMINIO_SECRET_KEY
  2. 当部署到非 localhost 的域名时,必须将 MINIO_EXTERNAL_ENDPOINT 更改为我们的域名,例如 example.com,因为这个变量控制着文件下载/上传的预签名 URL 的生成。
  3. 如果使用 HTTPS,将 MINIO_USE_HTTPSMINIO_EXTERNAL_ENDPOINT_USE_HTTPS 设置为 True
  4. 更新 MINIO_BROWSER_REDIRECT_URLMINIO_SERVER_URL 以匹配我们的域名。

3.2.7 CORS 设置

CORS 设置主要控制跨源资源共享,具体如下:

变量 描述 默认值 是否必需
CSRF_TRUSTED_ORIGINS CSRF 信任的来源
CORS_ALLOWED_ORIGINS CORS 允许的来源
CORS_ALLOWED_ORIGIN_REGEXES CORS 来源的正则表达式
CORS_ALLOW_ALL_ORIGINS 是否允许所有来源 False

设置步骤如下:

  1. 在生产环境中,将我们的域名添加到 CSRF_TRUSTED_ORIGINSCORS_ALLOWED_ORIGINS 中,例如 CSRF_TRUSTED_ORIGINS=https://example.com,https://www.example.com
  2. 避免在生产环境中将 CORS_ALLOW_ALL_ORIGINS 设置为 True,以保证安全性。

3.2.8 认证设置

认证设置主要控制用户认证,具体如下:

变量 描述 默认值 是否必需
IS_ENTERPRISE_MODE_ACTIVE 是否启用企业模式 False
IS_LOGIN_ACTIVE 是否启用登录功能 True
IS_SIGNUP_ACTIVE 是否启用注册功能 False
IS_GITHUB_LOGIN_ACTIVE 是否启用 GitHub 登录 False
IS_GOOGLE_LOGIN_ACTIVE 是否启用 Google 登录 False
GITHUB_CLIENT_ID GitHub OAuth 客户端 ID GitHub 登录必需
GITHUB_CLIENT_SECRET GitHub OAuth 客户端秘密 GitHub 登录必需
GOOGLE_CLIENT_ID Google OAuth 客户端 ID Google 登录必需
GOOGLE_CLIENT_SECRET Google OAuth 客户端秘密 Google 登录必需

设置步骤如下:

  1. 默认情况下,注册功能是禁用的(IS_SIGNUP_ACTIVE=False)。
  2. 社交登录功能默认也是禁用的。
  3. 如果要启用 GitHub 社交登录:

    • 在 https://github.com/settings/developers 创建一个 OAuth 应用。
    • 将回调 URL 设置为 http://your - domain.com/api/auth/github/callback/
    • 将客户端 ID 和秘密添加到环境变量中。
  4. 如果要启用 Google 社交登录:

    • 在 https://console.developers.google.com 创建凭证。
    • 将授权重定向 URI 设置为 http://your - domain.com/api/auth/google/callback/
    • 将客户端 ID 和秘密添加到环境变量中。

3.2.9 邮件设置

邮件设置主要控制邮件发送,具体如下:

变量 描述 默认值 是否必需
EMAIL_BACKEND 邮件后端 Django SMTP Backend
EMAIL_HOST SMTP 主机 邮件功能必需
EMAIL_PORT SMTP 端口 587
EMAIL_USE_TLS 是否使用 TLS 进行 SMTP 连接 True
EMAIL_HOST_USER SMTP 用户名 邮件功能必需
EMAIL_HOST_PASSWORD SMTP 密码 邮件功能必需
DEFAULT_FROM_EMAIL 默认发件人邮箱 邮件功能必需

设置步骤如下:

  1. 在生产环境中,设置一个合适的邮件服务。
  2. 对于测试,可以使用 Mailhog 或内置的 Postfix 容器等服务。
  3. 如果使用 Gmail,需要生成一个应用密码。

3.2.10 Scrapy 设置

Scrapy 设置主要控制使用 Scrapy 进行网页抓取,具体如下:

变量 描述 默认值 是否必需
SCRAPY_USER_AGENT 抓取时使用的用户代理 WaterCrawl/0.5.0 (+https://github.com/watercrawl/watercrawl)
SCRAPY_ROBOTSTXT_OBEY 是否遵守 robots.txt 规则 True
SCRAPY_CONCURRENT_REQUESTS 并发请求数 16
SCRAPY_DOWNLOAD_DELAY 下载延迟(秒) 0
SCRAPY_CONCURRENT_REQUESTS_PER_DOMAIN 每个域名的并发请求数 4
SCRAPY_CONCURRENT_REQUESTS_PER_IP 每个 IP 的并发请求数 4
SCRAPY_COOKIES_ENABLED 是否启用 cookies False
SCRAPY_HTTPCACHE_ENABLED 是否启用 HTTP 缓存 True
SCRAPY_HTTPCACHE_EXPIRATION_SECS HTTP 缓存的过期时间(秒) 3600
SCRAPY_HTTPCACHE_DIR HTTP 缓存目录 httpcache
SCRAPY_LOG_LEVEL Scrapy 日志级别 ERROR

设置步骤如下:

  1. 根据我们的抓取需求调整这些设置。
  2. 如果需要更激进的抓取,可以增加并发请求数,但要注意遵守网站的规则。
  3. 如果要进行更礼貌的抓取,可以添加下载延迟。

3.2.11 Playwright 设置

Playwright 设置主要控制使用 Playwright 进行浏览器自动化,具体如下:

变量 描述 默认值 是否必需
PLAYWRIGHT_SERVER Playwright 服务器 URL http://playwright:8000
PLAYWRIGHT_API_KEY Playwright API 密钥 your - secret - api - key 生产环境必需
PORT Playwright 服务端口 8000
HOST Playwright 服务主机 0.0.0.0

设置步骤如下:

  1. 在生产环境中,设置一个强密码作为 PLAYWRIGHT_API_KEY,用于服务之间的认证。

3.2.12 集成设置

集成设置主要控制第三方集成,具体如下:

变量 描述 默认值 是否必需
OPENAI_API_KEY OpenAI API 密钥 AI 功能必需
STRIPE_SECRET_KEY Stripe 秘密密钥 支付功能必需
STRIPE_WEBHOOK_SECRET Stripe 网络钩子秘密 Stripe 网络钩子必需
GOOGLE_ANALYTICS_ID Google Analytics ID 可选

设置步骤如下:

  1. 如果需要使用 AI 功能,从 OpenAI 获取 API 密钥。
  2. 如果需要进行支付处理,设置一个 Stripe 账户。
  3. 如果需要使用 Stripe 网络钩子,在 Stripe 仪表板中配置网络钩子端点。

3.2.13 功能标志设置

功能标志设置主要控制功能的可用性,具体如下:

变量 描述 默认值 是否必需
MAX_CRAWL_DEPTH 最大抓取深度 -1(无限制)
CAPTURE_USAGE_HISTORY 是否捕获使用历史记录 True

设置步骤如下:

  1. 如果要限制抓取深度,可以设置一个正整数。
  2. 如果要禁用使用跟踪,将 CAPTURE_USAGE_HISTORY 设置为 False

3.2.14 前端设置

前端设置主要控制 React 前端,具体如下:

变量 描述 默认值 是否必需
API_BASE_URL 前端使用的 API 基础 URL /api

设置步骤如下:

  1. 默认值 /api 与 Nginx 配置配合良好。
  2. 我们也可以使用绝对 URL(例如 http://localhost/api)或相对 URL(例如 /api)。

3.3 部署步骤

按照以下步骤可以部署 WaterCrawl:

  1. 克隆仓库
git clone https://github.com/watercrawl/watercrawl.git
cd watercrawl

这一步就像是把 WaterCrawl 的代码从云端下载到本地。

  1. 创建环境文件
cp docker/.env.example docker/.env

将示例环境文件复制为实际使用的环境文件。

  1. 编辑环境文件:设置必需的变量,例如:
# At minimum for production, set these:
SECRET_KEY="your - generated - secret - key"
API_ENCRYPTION_KEY="your - generated - api - encryption - key" # Generate a new one using `python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"`
DEBUG=False
ALLOWED_HOSTS=your - domain.com
POSTGRES_PASSWORD=your - strong - password
MINIO_ACCESS_KEY=your - minio - username
MINIO_SECRET_KEY=your - minio - password
MINIO_EXTERNAL_ENDPOINT=your - domain.com  # CRITICAL: Set to your domain
PLAYWRIGHT_API_KEY=your - strong - api - key

这里需要注意的是,SECRET_KEYAPI_ENCRYPTION_KEY 需要生成安全的随机值,POSTGRES_PASSWORDMINIO_ACCESS_KEYMINIO_SECRET_KEYPLAYWRIGHT_API_KEY 要设置为强密码。

  1. 启动服务
cd docker
docker - compose up -d

启动 Docker 容器,让 WaterCrawl 开始运行。

  1. 初始化数据库(首次运行时):
docker - compose exec app python manage.py migrate
docker - compose exec app python manage.py createsuperuser

python manage.py migrate 用于创建数据库表,python manage.py createsuperuser 用于创建超级用户,方便我们进行管理。

  1. 访问应用程序
    部署完成后,我们可以通过以下 URL 访问不同的服务:
  • 前端:http://your – domain.com
  • API:http://your – domain.com/api
  • MinIO 控制台:http://your – domain.com/minio – console

四、常见问题解答

4.1 连接问题

  • 无法连接到服务:可以使用 docker - compose logs <service - name> 命令查看 Docker 日志,了解具体的错误信息。
  • 数据库连接错误:使用 docker - compose ps 命令确保 PostgreSQL 正在运行。
  • 前端无法加载:在浏览器控制台检查 JavaScript 错误,找出问题所在。

4.2 数据持久化问题

  • 重启后数据丢失:确保 Docker 卷已经正确配置,这样数据才能在容器重启后得到保留。
  • 无法上传文件:检查 MinIO 的凭证和存储桶配置,确保配置正确。

4.3 性能问题

  • 响应时间慢:使用 docker stats 命令检查资源使用情况,找出性能瓶颈。
  • 内存问题:可以调整 MinIO 的 JVM 设置或 Gunicorn 的工作线程数,以优化内存使用。

如果遇到其他问题,可以在 GitHub 仓库中提交 issue,寻求更多的帮助。

五、总结

WaterCrawl 是一款功能强大、易于部署的网页抓取和数据提取工具,它提供了丰富的功能和可定制的选项,能够满足不同用户的需求。通过本文的介绍,我们了解了 WaterCrawl 的特点、快速启动方法、部署指南以及常见问题的解决方法。希望大家能够根据自己的需求,合理地使用 WaterCrawl,挖掘出更多有价值的数据。

在使用 WaterCrawl 的过程中,要注意根据不同的环境和需求,正确地配置环境变量,确保服务的安全和稳定运行。同时,如果遇到问题,不要慌张,可以通过查看日志、检查配置等方法来解决问题,也可以在社区中寻求帮助。相信 WaterCrawl 会成为你数据抓取和分析的得力助手。

– END –