快速开始
通过这个简短的教程,你可以在一两分钟内开始使用Crawlee进行爬取。要深入了解Crawlee的工作原理,请阅读介绍,这是一个全面的逐步指南,可帮助你创建第一个爬虫。
选择你的网络爬虫
Crawlee有三个主要的爬虫类:CheerioCrawler
,PuppeteerCrawler
和PlaywrightCrawler
。所有这些类都共享相同的接口,以便在它们之间进行灵活切换。
CheerioCrawler
这是一个普通的HTTP 爬虫。它使用Cheerio库解析HTML,并使用专门的got-scraping HTTP客户端来爬取网络,该客户端伪装成浏览器。它非常快速和高效,但无法处理JavaScript渲染。
PuppeteerCrawler
这个爬虫使用无头浏览器进行抓取,由Puppeteer库控制。它可以控制Chromium或Chrome。Puppeteer是无头浏览器已被实践过的自动化标准。
PlaywrightCrawler
Playwright 是 Puppeteer 的更强大、功能更齐全的后继者。它可以控制 Chromium、Chrome、Firefox、Webkit 和许多其他浏览器。如果你还不熟悉 Puppeteer,并且需要一个无头浏览器,那就选择 Playwright 吧。
Crawlee 需要 Node.js 16 或更高版本。
使用Crawlee CLI进行安装
尝试Crawlee的最快方式是使用Crawlee CLI并选择入门示例。 CLI将安装所有必要的依赖项,并为你添加样板代码以供你使用。
npx crawlee create my-crawler
安装完成后,你可以这样启动爬虫:
cd my-crawler && npm start
手动安装
你可以通过运行以下命令将Crawlee添加到任何Node.js项目中:
- CheerioCrawler
- PlaywrightCrawler
- PuppeteerCrawler
npm install crawlee
playwright
未捆绑Crawlee以减小安装大小并提供更大的灵活性。你需要使用NPM显式安装它。👇
npm install crawlee playwright
puppeteer
未捆绑Crawlee以减小安装大小并提供更大的灵活性。你需要使用NPM显式安装它。👇
npm install crawlee puppeteer
开始爬取
运行以下示例,使用所选的爬虫执行Crawlee网站的递归抓取。
To run the example, add a "type": "module"
clause into your
package.json
or copy it into a file with an .mjs
suffix. This enables import
statements in Node.js. See
要运行示例,请在你的package.json
中添加一个"type": "module"
,或将其复制到具有.mjs
后缀的文件中。这样可以在Node.js中启用import
语句。请参见
Node.js 文档
获取更多信息。
- CheerioCrawler
- PlaywrightCrawler
- PuppeteerCrawler
import { CheerioCrawler, Dataset } from 'crawlee';
// CheerioCrawler使用HTTP请求来爬取网络。
// 并使用Cheerio库解析HTML。
const crawler = new CheerioCrawler({
// 使用requestHandler来处理抓取的每个页面。
async requestHandler({ request, $, enqueueLinks, log }) {
const title = $('title').text();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
// 将结果保存为 JSON 到 ./storage/datasets/default
await Dataset.pushData({ title, url: request.loadedUrl });
// 从当前页面提取链接
// 并将它们添加到爬取队列中。
await enqueueLinks();
},
// 让我们限制爬取的范围,以缩短测试时间并提高安全性。
maxRequestsPerCrawl: 50,
});
// 将第一个URL添加到队列中并开始爬取。
await crawler.run(['https://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,
// 让我们限制爬取的范围,以缩短测试时间并提高安全性。
maxRequestsPerCrawl: 50,
});
// 将第一个URL添加到队列中并开始爬取。
await crawler.run(['https://crawlee.dev']);
import { PuppeteerCrawler, Dataset } from 'crawlee';
// PuppeteerCrawler使用由Puppeteer库控制的无头浏览器来爬取网络。
const crawler = new PuppeteerCrawler({
// 使用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,
// 让我们限制爬取的范围,以缩短测试时间并提高安全性。
maxRequestsPerCrawl: 50,
});
// 将第一个URL添加到队列中并开始爬取。
await crawler.run(['https://crawlee.dev']);
当你运行示例时,你将在终端中看到Crawlee自动化数据提取过程。
INFO CheerioCrawler: Starting the crawl
INFO CheerioCrawler: Title of https://crawlee.dev/ is 'Crawlee · Build reliable crawlers. Fast. | Crawlee'
INFO CheerioCrawler: Title of https://crawlee.dev/docs/examples is 'Examples | Crawlee'
INFO CheerioCrawler: Title of https://crawlee.dev/docs/quick-start is 'Quick Start | Crawlee'
INFO CheerioCrawler: Title of https://crawlee.dev/docs/guides is 'Guides | Crawlee'
完整浏览器运行
Puppeteer和Playwright控制的浏览器以无头模式运行(没有可见窗口)。当你想要查看浏览器中发生了什么时,你可以通过在爬虫构造函数中添加headless: false
选项来切换到有头模式。这在开发阶段很有用。
- PlaywrightCrawler
- PuppeteerCrawler
import { PlaywrightCrawler, Dataset } from 'crawlee';
const crawler = new PlaywrightCrawler({
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
await Dataset.pushData({ title, url: request.loadedUrl });
await enqueueLinks();
},
// 当你关闭无头模式时,爬虫将在可见的浏览器窗口中运行。
headless: false,
// 让我们限制爬取的范围,以缩短测试时间并提高安全性。
maxRequestsPerCrawl: 50,
});
// 将第一个URL添加到队列中并开始爬取。
await crawler.run(['https://crawlee.dev']);
import { PuppeteerCrawler, Dataset } from 'crawlee';
const crawler = new PuppeteerCrawler({
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
await Dataset.pushData({ title, url: request.loadedUrl });
await enqueueLinks();
},
// 当你关闭无头模式时,爬虫将在可见的浏览器窗口中运行。
headless: false,
// 让我们限制爬取的范围,以缩短测试时间并提高安全性。
maxRequestsPerCrawl: 50,
});
// 将第一个URL添加到队列中并开始爬取。
await crawler.run(['https://crawlee.dev']);
当你运行示例代码时,你将看到一个自动化浏览器在Crawlee网站上快速浏览。
为了展示,我们已经减慢了爬虫的速度,但请放心,在实际使用中它运行得非常快。


运行结果
Crawlee将数据存储到你当前工作目录中的./storage
目录。 你爬取的结果将以JSON文件形式在./storage/datasets/default/*.json
下可用。
{
"url": "https://crawlee.dev/",
"title": "Crawlee · The scalable web crawling, scraping and automation library for JavaScript/Node.js | Crawlee"
}
你可以通过设置CRAWLEE_STORAGE_DIR
环境变量来覆盖存储目录。
例子和进一步阅读
你可以在文档的示例部分找到更多展示Crawlee各种功能的例子。要更好地理解Crawlee及其组件,你应该逐步阅读介绍指南。
相关链接