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,请使用以下命令:
通过 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。
#### 第 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 步,或者环境变量在你的计算机上不起作用,请创建配置文件并手动替换占位符。
手动配置 ``` 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 ```
#### 第 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 中查看索引的数据:
使用 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` 索引
## 📖 了解更多 ### 🚀 核心指南与概念 - [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)中了解如何获取帮助、报告问题以及查找社区资源。
标签:Docker, Elasticsearch, Web爬虫, 安全防御评估, 搜索引擎, 数据索引, 请求拦截