elastic/crawler
GitHub: elastic/crawler
Elastic Open Crawler 是一款开源的轻量级命令行 Web 爬虫,用于自动发现、提取网页内容并将其直接索引到 Elasticsearch 中,从而快速实现内容搜索。
Stars: 221 | Forks: 45
# Elastic Open Web Crawler
Elastic Open Crawler 是一个轻量级、开源的 Web 爬虫,专为发现、提取网页内容并将其直接索引到 Elasticsearch 中而设计。
这款基于 CLI 的工具简化了将 Web 内容导入 Elasticsearch 的过程,允许通过配置文件定义按需或定时爬取,从而轻松实现内容搜索。
### 版本兼容性
| Elasticsearch | Open Crawler | 操作系统 |
|---------------|--------------------|------------------|
| `8.x` | `v0.2.0` 及以上 | Linux, OSX |
| `9.x` | `v0.2.1` 及以上 | Linux, OSX |
## 快速链接
- [动手实践快速入门](#quickstart):运行你的第一次爬取,将 Web 内容导入 Elasticsearch。
- [了解更多](#learn-more):了解如何配置高级功能以及理解详细选项。
- [开发者指南](#for-developers):供希望修改或扩展代码的开发者了解如何从源码构建并运行 Open Crawler。
### 快速入门
只需几个步骤,即可从零开始将你的网站内容爬取到 Elasticsearch 中。
#### 步骤
- [前置条件](#prerequisites)
- [第 1 步:测试爬取](#step-1-verify-docker-setup-and-run-a-test-crawl)
- [第 2 步:获取 Elasticsearch 详情](#step-2-get-your-elasticsearch-details)
- [第 3 步:设置环境变量](#step-3-set-environment-variables-optional)
- [第 4 步:配置爬虫](#step-4-update-crawler-configuration-for-elasticsearch)
- [第 5 步:运行爬取](#step-5-crawl-and-ingest-into-elasticsearch)
- [第 6 步:查看数据](#step-6-view-your-data)
#### 前置条件
- 你需要安装并运行 [Docker Desktop](https://docs.docker.com/desktop/)
- 你需要一个正在运行的 Elasticsearch 实例
- 开始免费的 [Elastic Cloud Hosted 或 Serverless 试用](https://www.elastic.co/cloud/cloud-trial-overview)
- [在本地开始使用](https://www.elastic.co/docs/solutions/search/run-elasticsearch-locally)
#### 第 1 步:验证 Docker 设置并运行测试爬取
首先,让我们通过爬取一个简单的网站并将结果打印到你的终端,来测试爬虫能否在你的系统上正常运行。我们将创建一个基本的配置文件,并针对 `https://example.com` 运行爬虫。
在你的终端中运行以下命令:
```
cat > crawl-config.yml << EOF
output_sink: console
domains:
- url: https://example.com
EOF
docker run \
-v "$(pwd)":/config \
-it docker.elastic.co/integrations/crawler:latest jruby \
bin/crawler crawl /config/crawl-config.yml
```
`-v "$(pwd)":/config` 标志将你的当前目录映射到容器的 `/config` 目录,使你的配置文件可供爬虫使用。
✅ **成功检查**:你应该能在控制台中看到打印出的来自 `example.com` 的 HTML 内容,并且以 `[primary] Finished a crawl. Result: success;` 结尾。
#### 第 2 步:获取你的 Elasticsearch 详情
在继续第 2 步之前,请确保你有一个正在运行的 Elasticsearch 实例。请参阅[前置条件](#prerequisites)。
在此步骤中,你需要:
- 你的 Elasticsearch endpoint URL
- 一个 API key
有关在 UI 中查找 endpoint URL 和创建 API key 的分步指南,请参阅[连接详情](https://www.elastic.co/docs/solutions/search/search-connection-details)。
如果你更愿意在 [Dev Tools 控制台](https://www.elastic.co/docs/explore-analyze/query-filter/tools/console)中创建 API key,请使用以下命令:
#### 第 3 步:设置环境变量(可选)
将你的连接详情和目标网站设置为环境变量。将值替换为你的实际值。
```
export ES_HOST="https://your-deployment.es.region.aws.elastic.cloud"
export ES_PORT="443"
export ES_API_KEY="your_encoded_api_key_here"
export TARGET_WEBSITE="https://your-website.com"
```
- `ES_HOST`:你的 Elasticsearch endpoint URL
- **Cloud Hosted/Serverless**:类似于 `https://your-deployment.es.region.aws.elastic.cloud`
- **Localhost**:
- 如果 Elasticsearch 在本地运行但不在同一个 Docker 网络中,请使用 `http://host.docker.internal`
- 如果 Elasticsearch 运行在同一网络上的 Docker 容器中,请使用 `http://elasticsearch`
- `ES_PORT`:Elasticsearch 端口
- **Cloud Hosted/Serverless**:`443`
- **Localhost**:`9200`
- `ES_API_KEY`:第 2 步中获取的 API key
- `TARGET_WEBSITE`:要爬取的网站
- 删除所有的尾部斜杠(`/`),否则会遇到错误:`ArgumentError: Domain "https://www.example.com/" cannot have a path`
#### 第 4 步:为 Elasticsearch 更新爬虫配置
运行以下命令以创建你的爬虫配置文件。这将使用你在第 3 步中设置的环境变量自动填充配置文件。
```
cat > crawl-config.yml << EOF
output_sink: elasticsearch
output_index: web-crawl-test
elasticsearch:
host: $ES_HOST
port: $ES_PORT
api_key: $ES_API_KEY
pipeline_enabled: false
domains:
- url: $TARGET_WEBSITE
EOF
```
如果你跳过了第 3 步,或者环境变量在你的计算机上不起作用,请创建配置文件并手动替换占位符。
#### 第 5 步:爬取并导入到 Elasticsearch
现在你可以将目标网站内容导入到 Elasticsearch 中:
```
docker run \
-v "$(pwd)":/config \
-it docker.elastic.co/integrations/crawler:latest jruby \
bin/crawler crawl /config/crawl-config.yml
```
✅ **成功检查**:你应该会看到类似以下的信息:
- `Connected to ES at https://your-endpoint - version: 8.x.x`
- `Index [web-crawl-test] was found!`
- `Elasticsearch sink initialized`
#### 第 6 步:查看你的数据
现在爬取已经完成,你可以在 Elasticsearch 中查看索引的数据:
## 📖 了解更多
### 🚀 核心指南与概念
- [CLI 参考](docs/CLI.md) - 用于运行爬取、验证和管理的命令
- [配置](docs/CONFIG.md) - 了解如何使用 `crawler.yml` 和 `elasticsearch.yml` 文件配置爬虫
- [文档 schema](docs/ADVANCED.md#document-schema) - 了解爬取的内容如何被索引到 Elasticsearch 中的一组预定义字段,以及如何使用提取规则添加字段
- [爬取规则](docs/features/CRAWL_RULES.md) - 控制爬虫访问哪些 URL
### ⚙️ 高级主题
- [爬取生命周期](docs/ADVANCED.md#crawl-lifecycle) - 了解爬虫如何在两个阶段(主爬取和清理爬取)中发现、排队和索引内容
- [提取规则](docs/features/EXTRACTION_RULES.md) - 定义爬虫如何从 HTML 中提取内容
- [二进制内容提取](docs/features/BINARY_CONTENT_EXTRACTION.md) - 从 PDF、DOCX 文件中提取文本
- [爬虫指令](docs/features/CRAWLER_DIRECTIVES.md) - 使用 robots.txt、meta 标签或嵌入式数据属性来指导发现和内容提取
- [定时任务](docs/features/SCHEDULING.md) - 使用 cron 定时任务自动化爬取
- [Ingest pipeline](docs/features/INGEST_PIPELINES.md) - Elasticsearch ingest pipeline 集成
- [日志](docs/features/LOGGING.md) - 监控和排查爬虫活动
- [在 Windows 上运行](https://www.elastic.co/search-labs/blog/elastic-open-crawler-in-windows-with-docker) - 了解如何使用 Docker 在 Windows 上运行 Open Crawler
### ⚖️ Elastic Crawler 对比
- [功能对比](docs/FEATURE_COMPARISON.md) - 查看 Open Crawler 与 Elastic Crawler 的对比,包括功能支持和部署差异
## 👩🏽💻 开发者指南
### 从源码构建
你可以使用提供的设置说明在本地构建并运行 Open Crawler。
详细的设置步骤(包括环境要求)在[开发者指南](docs/DEVELOPER_GUIDE.md)中。
### 贡献
想要贡献吗?我们欢迎 Bug 报告、代码贡献和文档改进。
阅读[贡献指南](docs/CONTRIBUTING.md)了解贡献类型、PR 指南和编码规范。
## 💬 支持
在[支持指南](docs/SUPPORT.md)中了解如何获取帮助、报告问题以及查找社区资源。
通过 Dev Tools 控制台创建 API key
在 Dev Tools 控制台中运行以下命令: ``` POST /_security/api_key { "name": "crawler-key", "role_descriptors": { "crawler-role": { "cluster": ["monitor"], "indices": [ { "names": ["web-crawl-*"], "privileges": ["write", "create_index", "monitor"] } ] } } } ``` 保存响应中的 `encoded` 值 - 这就是你的 API key。手动配置
``` cat > crawl-config.yml << 'EOF' output_sink: elasticsearch output_index: web-crawl-test elasticsearch: host: https://your-deployment.es.region.aws.elastic.cloud # Your ES_HOST port: 443 # Your ES_PORT (443 for cloud, 9200 for localhost) api_key: your_encoded_api_key_here # Your ES_API_KEY from Step 2 pipeline_enabled: false domains: - url: https://your-website.com # Your target website EOF ```使用 API
最快的方法是从命令行使用 `curl`。这会重用你之前设置的环境变量。 ``` curl -X GET "${ES_HOST}:${ES_PORT}/web-crawl-test/_search" \ -H "Authorization: ApiKey ${ES_API_KEY}" \ -H "Content-Type: application/json" ``` 或者,在 Dev Tools 控制台中运行以下 API 调用: ``` GET /web-crawl-test/_search ```使用 Kibana/Serverless UI
1. 前往 Kibana 或 Serverless UI 2. 使用[全局搜索栏](https://www.elastic.co/docs/explore-analyze/find-and-organize/find-apps-and-objects)找到 **Index Management** 页面 3. 选择 `web-crawl-test` 索引标签:Docker, Elasticsearch, Web爬虫, 安全防御评估, 搜索引擎, 数据索引, 请求拦截