Files
2026-07-13 10:34:59 +00:00

7.8 KiB
Raw Permalink Blame History

Note

本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。

Crawlee
用于网页抓取与浏览器自动化的库

apify%2Fcrawlee | Trendshift

NPM latest version Downloads Chat on discord Build Status

Crawlee 端到端覆盖你的爬取与抓取需求,助你快速构建可靠的抓取器。

即使使用默认配置,你的爬虫也能表现得像真人一样,并躲过现代机器人防护的检测。Crawlee 提供爬取网页链接、抓取数据并将其存储到磁盘或云端的工具,同时保持可配置,以满足你项目的需求。

Crawlee 以 crawlee NPM 包的形式提供。

👉 Crawlee 项目网站 查看完整文档、指南与示例** 👈

你更喜欢 🐍 Python 而非 JavaScript👉 查看 Crawlee for Python 👈.

安装

我们建议查看 Crawlee 文档中的 入门教程 以了解更多信息。

Crawlee 需要 Node.js 16 或更高版本

使用 Crawlee CLI

试用 Crawlee 最快的方式是使用 Crawlee CLI 并选择 Getting started example 示例。CLI 会安装所有必要依赖,并添加样板代码供你上手体验。

npx crawlee create my-crawler
cd my-crawler
npm start

手动安装

如果你更希望将 Crawlee 添加到你自己的项目中,请尝试下面的示例。由于它使用了 PlaywrightCrawler,我们还需要安装 Playwright.。为减小安装体积,它并未与 Crawlee 捆绑在一起。

npm install crawlee playwright
import { PlaywrightCrawler, Dataset } from 'crawlee';

// PlaywrightCrawler crawls the web using a headless
// browser controlled by the Playwright library.
const crawler = new PlaywrightCrawler({
    // Use the requestHandler to process each of the crawled pages.
    async requestHandler({ request, page, enqueueLinks, log }) {
        const title = await page.title();
        log.info(`Title of ${request.loadedUrl} is '${title}'`);

        // Save results as JSON to ./storage/datasets/default
        await Dataset.pushData({ title, url: request.loadedUrl });

        // Extract links from the current page
        // and add them to the crawling queue.
        await enqueueLinks();
    },
    // Uncomment this option to see the browser window.
    // headless: false,
});

// Add first URL to the queue and start the crawl.
await crawler.run(['https://crawlee.dev']);

默认情况下,Crawlee 会将数据存储到当前工作目录下的 ./storage。你可以通过 Crawlee 配置覆盖该目录。详情请参阅 配置指南,、请求存储结果存储.

安装预发布版本

我们会为 Crawlee 中每一次合并的代码变更提供自动化的 beta 构建。你可以在 npm 发布列表. 中找到它们。如果你想在我们正式发布之前测试新功能或 bug 修复,可以像这样安装 beta 构建:

npm install crawlee@next

如果你还使用 Apify SDK,,你需要在 package.json 文件中指定依赖覆盖(dependency overrides),以免安装多个版本的 Crawlee:

{
    "overrides": {
       "apify": {
           "@crawlee/core": "$crawlee",
           "@crawlee/types": "$crawlee",
           "@crawlee/utils": "$crawlee"
       }
    }
}

🛠 特性

  • 用于 HTTP 与无头浏览器(headless browser 爬取的统一接口
  • 持久化 队列(queue,用于管理待爬取 URL(支持广度优先与深度优先)
  • 可插拔的 存储(storage,同时支持表格数据与文件
  • 根据可用系统资源自动 扩缩(scaling
  • 内置 代理轮换(proxy rotation 与会话管理
  • 可通过 钩子(hooks 自定义生命周期
  • 用于初始化项目的 CLI
  • 可配置的 路由(routing错误处理(error handling重试(retries
  • 可直接部署的 Dockerfiles
  • 使用 TypeScript 编写,支持泛型(generics

👾 HTTP 爬取

  • 零配置的 HTTP2 支持,代理同样适用
  • 自动生成类浏览器请求头
  • 复现浏览器的 TLS 指纹
  • 集成高速 HTML 解析器Cheerio 与 JSDOM
  • 当然,你也可以抓取 JSON API

💻 真实浏览器爬取

  • JavaScript 渲染(rendering截图(screenshots
  • 支持 无头(headless有头(headful 模式
  • 零配置生成类人指纹
  • 自动 浏览器管理
  • 使用同一接口调用 PlaywrightPuppeteer
  • 支持 ChromeFirefoxWebKit

在 Apify 平台上使用

Crawlee 是开源的,可在任何地方运行,但由于它由 Apify, 开发,因此在 Apify 平台上搭建并在云端运行十分便捷。访问 Apify SDK 网站 了解更多关于将 Crawlee 部署到 Apify 平台的信息。

支持

如果你发现 Crawlee 的任何 bug 或问题,请 在 GitHub 提交 issue.。如有疑问,你可以在 Stack Overflow,、GitHub Discussions 提问,或加入我们的 Discord 服务器.

贡献

欢迎你的代码贡献,你将获得永世的赞誉!如果你有任何改进想法,请提交 issue 或创建 pull request。贡献指南与行为准则请参阅 CONTRIBUTING.md.

许可证

本项目采用 Apache License 2.0 许可 — 详情请参阅 LICENSE.md 文件。