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,可以按照以下步骤进行操作:
- 
克隆仓库:打开终端,运行以下命令克隆 WaterCrawl 的仓库:  
git clone https://github.com/watercrawl/watercrawl.git
cd watercrawl
这一步就像是把 WaterCrawl 的代码从云端搬运到了我们的本地电脑上。
- 
构建和运行 Docker 容器:继续在终端中执行以下命令:  
cd docker
cp .env.example .env
docker compose up -d
这里的 cp .env.example .env 是将示例环境文件复制为实际使用的环境文件,而 docker compose up -d 则是启动 Docker 容器,让 WaterCrawl 开始运行。
- 
访问应用程序:打开浏览器,访问 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 | 
否 | 
设置步骤如下:
- 
首先确定我们要将应用程序暴露在哪个端口上。  - 
如果端口 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 | 
否 | 
设置步骤如下:
- 
在生产环境中,我们需要生成一个安全的随机 SECRET_KEY,可以使用以下命令: 
openssl rand -base64 32
- 
将 DEBUG设置为False,以提高生产环境的安全性。 - 
将 ALLOWED_HOSTS设置为我们的域名,例如example.com,www.example.com。 - 
根据我们所在的地区,将 TIME_ZONE设置为本地时区,比如Europe/Berlin。 - 
将 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 | 
否 | 
设置步骤如下:
- 
在生产环境中,我们需要设置一个强密码作为 POSTGRES_PASSWORD,以保证数据库的安全性。 - 
默认值已经配置好,可以与包含的 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 | 
否 | 
设置步骤如下:
- 
默认值与捆绑的 Redis 服务配合良好。  - 
只有在使用外部 Redis 服务器时,才需要更改这些设置。  
3.2.5 JWT 设置
JWT 设置主要控制 JSON Web Token 认证,具体如下:
| 变量 | 描述 | 默认值 | 是否必需 | 
|---|---|---|---|
ACCESS_TOKEN_LIFETIME_MINUTES | 
JWT 访问令牌的有效期(分钟) | 5 | 
否 | 
REFRESH_TOKEN_LIFETIME_DAYS | 
JWT 刷新令牌的有效期(天) | 30 | 
否 | 
设置步骤如下:
- 
根据我们的安全需求,调整令牌的有效期。  - 
在更安全的环境中,可以考虑缩短令牌的有效期。  
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/ | 
否 | 
设置步骤如下:
- 
在生产环境中,设置强密码作为 MINIO_ACCESS_KEY和MINIO_SECRET_KEY。 - 
当部署到非 localhost的域名时,必须将MINIO_EXTERNAL_ENDPOINT更改为我们的域名,例如example.com,因为这个变量控制着文件下载/上传的预签名 URL 的生成。 - 
如果使用 HTTPS,将 MINIO_USE_HTTPS和MINIO_EXTERNAL_ENDPOINT_USE_HTTPS设置为True。 - 
更新 MINIO_BROWSER_REDIRECT_URL和MINIO_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 | 
否 | 
设置步骤如下:
- 
在生产环境中,将我们的域名添加到 CSRF_TRUSTED_ORIGINS和CORS_ALLOWED_ORIGINS中,例如CSRF_TRUSTED_ORIGINS=https://example.com,https://www.example.com。 - 
避免在生产环境中将 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 登录必需 | 
设置步骤如下:
- 
默认情况下,注册功能是禁用的( IS_SIGNUP_ACTIVE=False)。 - 
社交登录功能默认也是禁用的。  - 
如果要启用 GitHub 社交登录: - 
在 https://github.com/settings/developers 创建一个 OAuth 应用。  - 
将回调 URL 设置为 http://your - domain.com/api/auth/github/callback/。 - 
将客户端 ID 和秘密添加到环境变量中。  
 - 
 - 
如果要启用 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 | 
默认发件人邮箱 | 空 | 邮件功能必需 | 
设置步骤如下:
- 
在生产环境中,设置一个合适的邮件服务。  - 
对于测试,可以使用 Mailhog 或内置的 Postfix 容器等服务。  - 
如果使用 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 | 
否 | 
设置步骤如下:
- 
根据我们的抓取需求调整这些设置。  - 
如果需要更激进的抓取,可以增加并发请求数,但要注意遵守网站的规则。  - 
如果要进行更礼貌的抓取,可以添加下载延迟。  
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 | 
否 | 
设置步骤如下:
- 
在生产环境中,设置一个强密码作为 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 | 空 | 可选 | 
设置步骤如下:
- 
如果需要使用 AI 功能,从 OpenAI 获取 API 密钥。  - 
如果需要进行支付处理,设置一个 Stripe 账户。  - 
如果需要使用 Stripe 网络钩子,在 Stripe 仪表板中配置网络钩子端点。  
3.2.13 功能标志设置
功能标志设置主要控制功能的可用性,具体如下:
| 变量 | 描述 | 默认值 | 是否必需 | 
|---|---|---|---|
MAX_CRAWL_DEPTH | 
最大抓取深度 | -1(无限制) | 
否 | 
CAPTURE_USAGE_HISTORY | 
是否捕获使用历史记录 | True | 
否 | 
设置步骤如下:
- 
如果要限制抓取深度,可以设置一个正整数。  - 
如果要禁用使用跟踪,将 CAPTURE_USAGE_HISTORY设置为False。 
3.2.14 前端设置
前端设置主要控制 React 前端,具体如下:
| 变量 | 描述 | 默认值 | 是否必需 | 
|---|---|---|---|
API_BASE_URL | 
前端使用的 API 基础 URL | /api | 
否 | 
设置步骤如下:
- 
默认值 /api与 Nginx 配置配合良好。 - 
我们也可以使用绝对 URL(例如 http://localhost/api)或相对 URL(例如/api)。 
3.3 部署步骤
按照以下步骤可以部署 WaterCrawl:
- 
克隆仓库:  
git clone https://github.com/watercrawl/watercrawl.git
cd watercrawl
这一步就像是把 WaterCrawl 的代码从云端下载到本地。
- 
创建环境文件:  
cp docker/.env.example docker/.env
将示例环境文件复制为实际使用的环境文件。
- 
编辑环境文件:设置必需的变量,例如:  
# 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_KEY 和 API_ENCRYPTION_KEY 需要生成安全的随机值,POSTGRES_PASSWORD、MINIO_ACCESS_KEY、MINIO_SECRET_KEY 和 PLAYWRIGHT_API_KEY 要设置为强密码。
- 
启动服务:  
cd docker
docker - compose up -d
启动 Docker 容器,让 WaterCrawl 开始运行。
- 
初始化数据库(首次运行时):  
docker - compose exec app python manage.py migrate
docker - compose exec app python manage.py createsuperuser
python manage.py migrate 用于创建数据库表,python manage.py createsuperuser 用于创建超级用户,方便我们进行管理。
- 
访问应用程序: 
部署完成后,我们可以通过以下 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 –
