最完整Crawlee入门指南:5分钟搭建专业爬虫项目
你还在为复杂的网页抓取任务烦恼吗?想快速搭建一个稳定高效的爬虫却不知从何下手?本文将带你5分钟入门Crawlee,一个专为Node.js设计的网页抓取和浏览器自动化库,让你轻松构建专业级爬虫项目。读完本文,你将掌握Crawlee的安装配置、三种核心爬虫类型的使用、数据提取与存储的完整流程,并能独立运行你的第一个爬虫项目。
环境准备与快速安装
Crawlee需要Node.js 16或更高版本环境。首先确认你的开发环境是否满足要求:
node -v # 检查Node.js版本
npm -v # 检查npm版本
两种安装方式
1. 使用Crawlee CLI(推荐) 最快捷的方式是使用Crawlee命令行工具,它会自动创建项目结构并安装依赖:
npx crawlee create my-crawler
cd my-crawler && npm start
2. 手动安装 如果需要集成到现有Node.js项目,可根据爬虫类型手动安装:
CheerioCrawler(轻量级HTTP爬虫)
npm install crawlee
PlaywrightCrawler(多浏览器支持)
npm install crawlee playwright
PuppeteerCrawler(Chrome/Chromium专用)
npm install crawlee puppeteer
官方文档:docs/quick-start/index.mdx
核心爬虫类型与应用场景
Crawlee提供三种核心爬虫,满足不同场景需求:
1. CheerioCrawler:轻量级HTTP爬虫
基于Cheerio解析HTML,速度快、资源占用低,适合静态网页抓取。不支持JavaScript渲染,适用于服务器端渲染(SSR)网站。
import { CheerioCrawler } from 'crawlee';
const crawler = new CheerioCrawler({
async requestHandler({ $, request }) {
const title = $('title').text();
console.log(`标题: ${title} (${request.url})`);
}
});
await crawler.run(['https://crawlee.dev']);
2. PlaywrightCrawler:多浏览器自动化
支持Chromium、Firefox、WebKit等多种浏览器,功能全面,适合需要JavaScript渲染的动态网页。
import { PlaywrightCrawler } from 'crawlee';
const crawler = new PlaywrightCrawler({
async requestHandler({ page, request }) {
const title = await page.title();
console.log(`标题: ${title} (${request.url})`);
}
});
await crawler.run(['https://crawlee.dev']);
3. PuppeteerCrawler:Chrome专用爬虫
专注于Chrome/Chromium浏览器自动化,API成熟稳定,适合需要深度控制Chrome的场景。
三种爬虫对比:
| 爬虫类型 | 渲染能力 | 速度 | 资源占用 | 适用场景 |
|---|---|---|---|---|
| CheerioCrawler | ❌ 无 | ⚡ 最快 | 📉 低 | 静态网页、API数据 |
| PlaywrightCrawler | ✅ 全功能 | 🚀 快 | 📈 中 | 动态网页、多浏览器测试 |
| PuppeteerCrawler | ✅ Chrome渲染 | 🚀 快 | 📈 中 | Chrome生态集成 |
技术文档:docs/introduction/02-first-crawler.mdx
实战:5分钟构建网页标题抓取器
下面以PlaywrightCrawler为例,构建一个抓取网页标题并保存的完整爬虫:
1. 创建基本爬虫结构
import { PlaywrightCrawler, Dataset } from 'crawlee';
const crawler = new PlaywrightCrawler({
// 启用可视化模式(开发调试用)
headless: false,
async requestHandler({ page, request }) {
// 提取页面标题
const title = await page.title();
console.log(`抓取成功: ${title} (${request.url})`);
// 保存数据到数据集
await Dataset.pushData({
url: request.url,
title,
timestamp: new Date().toISOString()
});
}
});
// 启动爬虫,从指定URL开始
await crawler.run([
'https://crawlee.dev',
'https://crawlee.dev/js/docs/examples'
]);
2. 运行爬虫
node src/main.js
运行时会看到浏览器自动打开并访问目标网页,终端输出抓取进度:
INFO PlaywrightCrawler: Starting the crawl
抓取成功: Crawlee · Build reliable crawlers. Fast. | Crawlee (https://crawlee.dev)
抓取成功: Examples | Crawlee (https://crawlee.dev/js/docs/examples)
INFO PlaywrightCrawler: Crawling finished. Final request statistics:
INFO PlaywrightCrawler: Requests processed: 2
3. 查看结果数据
Crawlee自动将数据保存在./storage/datasets/default目录下:
// storage/datasets/default/000000001.json
{
"url": "https://crawlee.dev",
"title": "Crawlee · Build reliable crawlers. Fast. | Crawlee",
"timestamp": "2025-10-02T10:36:27.123Z"
}
完整示例:docs/introduction/07-example.ts
高级功能与最佳实践
1. 动态添加URL(递归爬取)
通过enqueueLinks自动发现并添加新URL:
import { PlaywrightCrawler } from 'crawlee';
const crawler = new PlaywrightCrawler({
async requestHandler({ page, enqueueLinks }) {
// 提取当前页面标题
const title = await page.title();
console.log(`标题: ${title}`);
// 发现并添加新链接(仅同一域名)
await enqueueLinks({
selector: 'a',
filter: ({ url }) => url.hostname === 'crawlee.dev'
});
}
});
await crawler.run(['https://crawlee.dev']);
2. 数据存储与导出
除默认文件存储外,可通过Dataset导出数据为CSV/JSON:
// 导出为CSV
await Dataset.exportToCSV('results');
// 导出为JSON
await Dataset.exportToJSON('results');
数据存储文档:docs/guides/result-storage.mdx
3. 反屏蔽策略
Crawlee内置多种反屏蔽机制,可通过配置增强爬取稳定性:
const crawler = new PlaywrightCrawler({
// 随机用户代理
useSessionPool: true,
sessionPoolOptions: { sessionOptions: { maxUsageCount: 5 } },
// 随机延迟
minConcurrency: 1,
maxConcurrency: 5,
// 重试失败请求
maxRequestRetries: 3,
});
反屏蔽指南:docs/guides/avoid_blocking.mdx
部署与扩展
本地开发调试
启用Headful模式查看浏览器操作过程:
const crawler = new PlaywrightCrawler({
headless: false, // 显示浏览器窗口
slowMo: 500, // 延迟500ms,便于观察
});
服务器部署
Crawlee支持多种部署方式:
- Docker容器化:docs/guides/docker_images.mdx
- 云平台部署:AWS、GCP等云服务部署指南 docs/deployment/
- Apify平台:一键部署到Apify云爬虫平台
总结与资源推荐
通过本文你已掌握Crawlee的核心使用方法,能够快速构建专业爬虫项目。关键要点:
- 根据需求选择合适的爬虫类型(静态页用Cheerio,动态页用Playwright/Puppeteer)
- 使用
crawler.run()启动爬虫,传入起始URL列表 - 通过
Dataset.pushData()轻松保存抓取结果 - 利用
enqueueLinks实现递归爬取整站内容
进阶学习资源:
- 完整示例库:docs/examples/
- API参考文档:packages/core/src/
- 社区教程:README.md
现在就动手创建你的第一个Crawlee爬虫项目吧!遇到问题可查阅官方文档或提交Issue获取帮助。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0181- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
snackjson新一代高性能 Jsonpath 框架。同时兼容 `jayway.jsonpath` 和 IETF JSONPath (RFC 9535) 标准规范(支持开放式定制)。Java00