
crawlee
写爬虫不用再操心反爬和调度,专注提取数据
Crawlee 是 Apify 开源的 Node.js 网页抓取与浏览器自动化库,用 JavaScript/TypeScript 编写,目标是让开发者快速构建稳定可靠的爬虫。它解决了传统爬虫开发中反爬对抗、并发调度、失败重试、代理轮换等重复性难题:内置自动重试、请求队列、会话池、代理轮换和指纹伪装,能显著降低被目标网站封禁的概率。核心能力包括统一 API 支持多种抓取引擎(Puppeteer、Playwright、Cheerio、JSDOM 及原生 HTTP),可无头或有头运行;支持下载 HTML、PDF、JPG、PNG 等文件,提取的数据可直接用于 AI、LLM、RAG 或 GPT 场景。它还提供自动缩放、请求去重、数据存储与导出,并兼容 Apify 云平台,适合从个人脚本到生产级爬虫的各类需求。
项目数据
使用教程
环境要求
- Node.js 16 或更高版本
- npm 包管理器(随 Node.js 一起安装)
- 建议准备一个自己的 Node.js 项目目录用于引入 Crawlee
- 如需浏览器抓取,需能正常下载 Playwright 浏览器依赖(网络可达 npm)
安装与启动步骤
-
1检查 Node 版本
Crawlee 明确要求 Node.js 16 或更高,版本过低需先升级 Node 再继续。
node -v -
2安装依赖包
Crawlee 不自带 Playwright,示例使用 PlaywrightCrawler,因此两个包要一起安装。
npm install crawlee playwright -
3编写爬虫脚本
新建脚本文件(如 crawlee.js)粘贴示例代码:抓取 crawlee.dev 并保存页面标题。
import { PlaywrightCrawler, Dataset } from 'crawlee'; // PlaywrightCrawler 使用 Playwright 控制的无头浏览器抓取网页 const crawler = new PlaywrightCrawler({ // requestHandler 处理每一个被抓取的页面 async requestHandler({ request, page, enqueueLinks, log }) { const title = await page.title(); log.info(`Title of ${request.loadedUrl} is '${title}'`); // 结果以 JSON 形式保存到 ./storage/datasets/default await Dataset.pushData({ title, url: request.loadedUrl }); // 提取当前页面的链接并加入抓取队列 await enqueueLinks(); }, // 取消注释可看到浏览器窗口(默认无头运行) // headless: false, }); // 加入首个 URL 并启动抓取 await crawler.run(['https://crawlee.dev']); -
4运行脚本
README 未给出运行命令,按 Node.js 常规方式运行该脚本文件,观察控制台日志输出。
node crawlee.js -
5试用预发布版本
想提前验证新特性或修复,可安装每次合并代码后自动构建的 beta 版本。
npm install crawlee@next
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
headless | 否 | 是否以无头模式运行浏览器,示例中默认开启,注释掉即为有头模式 | false |
overrides.apify.@crawlee/core | 否 | 同时使用 Apify SDK 时,通过依赖覆盖避免安装多份 Crawlee | $crawlee |
overrides.apify.@crawlee/types | 否 | 同上,配合 @crawlee/core 覆盖一起写入 package.json | $crawlee |
overrides.apify.@crawlee/utils | 否 | 同上,配合 @crawlee/core 覆盖一起写入 package.json | $crawlee |
如何确认成功
脚本运行后日志打印 Title of
常见问题
Q:Crawlee 对 Node.js 版本有什么要求?
A:README 明确要求 Node.js 16 或更高版本,低于该版本请先升级 Node 再安装使用。
Q:为什么安装时要额外装 playwright?
A:Playwright 并未随 Crawlee 一起打包,这样可减小安装体积;使用 PlaywrightCrawler 时必须单独安装。
Q:抓到的数据保存在哪里?
A:默认保存到当前工作目录下的 ./storage,可通过 Crawlee 配置修改该目录。
Q:怎么体验还没正式发布的新功能?
A:安装 beta 构建:npm install crawlee@next,官方为每次合并的代码变更提供自动 beta 构建。
Q:Crawlee 能部署到云上运行吗?
A:Crawlee 开源且可运行在任何环境,官方文档也提供了部署到 Apify 平台云端运行的方式。
注意事项
- Crawlee 是一个库而非独立服务,必须写入自己的 Node.js 项目后由代码调用。
- 默认数据目录为当前工作目录下的 ./storage,可通过 Crawlee 配置覆盖,细节见官方 Configuration 指南。
- README 未提供启动命令,本文按 Node.js 常规方式运行脚本,实际以你的项目配置为准。
- 若同时使用 Apify SDK,记得在 package.json 中按 README 示例配置 overrides,避免多版本 Crawlee 并存。
核心亮点
- 统一 API 封装 Puppeteer、Playwright、Cheerio、JSDOM 和原生 HTTP,切换抓取引擎几乎零成本
- 内置自动重试、会话池、代理轮换和浏览器指纹伪装,开箱即用降低被封风险
- 自带请求队列、并发自动缩放、去重和数据存储,生产级爬虫基础设施齐全
不足之处
- 依赖 Node.js 生态,Python 或 Go 技术栈团队需要额外适配
- 高级反爬场景仍需自行接入第三方代理和验证码服务,并非全自动
适用场景
- 为 LLM/RAG 应用批量抓取网页内容并清洗成训练语料
- 电商价格监控与竞品数据采集,需要定时抓取和代理轮换
- 批量下载网站上的 PDF、图片等静态资源并归档
替代项目
Scrapy、Playwright
项目介绍
下一篇:moon
同类项目推荐
n8n
开源
拖拽搭建自动化流程,轻松接入 AI 与 400+ 应用,搞定重复工作。
Fair-code workflow automation platform with native AI capabilities. Combine visual b···
robotcode
开源
让 Robot Framework 拥有现代 IDE 体验,调试、补全、运行一气呵成。
Open Source Toolkit for Robot Framework, providing Language Server Protocol support,···
puppeteer
开源
用 JavaScript 轻松操控无头浏览器,搞定自动化测试与网页抓取。
JavaScript API for Chrome and Firefox
customermates
开源
比 Pipedrive 直观 10 倍的现代开源 CRM,轻松管理客户与自动化流程。
Building a modern alternative to Pipedrive that is 10x more intuitive.