TL;DR
- Crawlee 使用三种核心存储抽象:Dataset 用于附加导向的结果记录,KeyValueStore 用于命名值和工件,RequestQueue 用于调度和去重请求。
- 当数据必须在多次运行间存活时,命名存储是更安全的选择;未命名的默认存储适用于临时工作,可以在启动时清除。
- 存储类型应遵循访问模式,而不是便利性。 在一个存储中混合抓取状态、二进制工件和结果行会使重试和保留变得更加困难。
- 生产爬虫应该在扩展并发之前定义稳定的记录键、幂等写入、保留和恢复。
- Nstdata Crawl 可以提供托管的获取层,而 Crawlee 存储则组织应用程序端的请求、工件和接受的记录。
Crawlee 的数据存储类型是什么?
Crawlee 的主要存储类型是 Dataset、KeyValueStore 和 RequestQueue。Dataset 存储在抓取过程中通常被附加的结果记录。KeyValueStore 存储通过键寻址的值,包括配置、抓取状态或较大的工件。RequestQueue 存储待处理的 URL 或请求,并根据队列的请求标识规则防止重复调度。
当一个团队希望在保留其自己的应用程序端存储模型的同时获得托管获取时,Nstdata Crawl 可以提供页面或有限网站的集合层。
Crawlee for Python 存储指南 区分了高层存储接口与持久化其数据的存储客户端。JavaScript 实现使用相同的概念划分,但团队应阅读其选择的语言和版本的文档,而不是假设 API 是相同的。
何时应使用 Dataset?
使用 Dataset 用于下游代码需要迭代、导出或分析的附加导向爬虫输出。示例包括产品记录、文章元数据、接受的提取结果和页面质量测量。每条记录应包含足够的来源信息以独立存在:规范 URL、检索时间戳、状态、内容哈希、架构版本和验证结果。
Dataset 不适合可变的单例状态或反复更新一个键下的大型工件。如果工作流需要保存最新的游标、配置或屏幕截图,KeyValueStore 通常是更清晰的抽象。如果需要调度带有去重的 URL,RequestQueue 是正确的选择。
何时应使用 KeyValueStore?
使用 KeyValueStore 来获取通过已知名称检索的值。典型示例包括输入配置、检查点、robots 策略快照、屏幕截图、原始 HTML 或运行的 JSON 摘要。密钥应该是确定性的并且有文档记录,以便恢复过程可以找到而不必扫描无关记录。
KeyValueStore 可以保存结构化值,但不应成为结果数据集的无索引替代品。对临时调试工件和耐用合规证据分别定义保留。大型工件可能需要外部对象存储,具体取决于所选择的 Crawlee 存储客户端和部署环境。
何时应使用 RequestQueue?
使用 RequestQueue 来处理爬虫仍然需要处理的请求。该队列支持发现、优先级和去重,使爬虫可以添加链接而无需重复处理相同的请求。在请求的用户数据中存储请求特定的上下文,如发现源、深度、标签、重试计数和业务标识符,在文档 API 支持的地方。
请求身份需要经过深思熟虑的设计。查询字符串顺序、跟踪参数、片段和规范性重定向可以创建代表相同内容的不同 URL。仅规范已知不会更改资源的参数。过于激进的规范化可能会合并应保持分开的页面。




