ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

5分钟让 Crawlee 爬虫跑起来:新手网页抓取从选型到生产

5分钟让 Crawlee 爬虫跑起来:新手网页抓取从选型到生产 5分钟让 Crawlee 爬虫跑起来新手网页抓取从选型到生产【免费下载链接】crawleeCrawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or GPTs. Download HTML, PDF, JPG, PNG, and other files from websites. Works with Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP. Both headful and headless mode. With proxy rotation.项目地址: https://gitcode.com/GitHub_Trending/cr/crawlee你要给一个商品列表页做数据归档每天更新、不丢数据、断了能接着爬。Crawlee 是一个面向 Node.js 的网页抓取与浏览器自动化库把调度、重试、存储这些脏活全包了。读完这篇你能独立完成从脚手架到递归爬取的完整流程。三条命令从空目录到爬虫跑起来先把命令放前面能直接复制执行npx crawlee create my-crawler # 用官方模板生成项目 cd my-crawler npm start # 装依赖并启动示例npx crawlee create是官方 CLI 命令它根据你选的类型生成一套现成项目package.json、入口文件src/main.js、浏览器依赖都替你配好了。npm start跑的是内置的入门示例你会看到终端开始访问https://crawlee.dev逐页输出标题最后打印统计信息。跑完这一遍你就把安装 → 运行 → 出结果的完整链路走通了一遍也就是 Crawlee 安装教程的核心部分。脚手架里有什么打开src/main.js你会看到一个爬虫实例加一个requestHandler函数每爬到一个页面这个函数就被调用一次。后面所有功能扩展都是往这个结构里加东西。已有项目里手动安装不想用脚手架就在现有项目里装。注意一个细节Playwright 和 Puppeteer 默认不打包在 Crawlee 里用浏览器爬虫要额外装npm install crawlee # 只抓静态页装这个就够 npm install crawlee playwright # 需要驱动浏览器加 playwright npm install crawlee puppeteer # 或者用 puppeteer环境要求是 Node.js 16 或更高版本先跑一下node -v确认。静态页还是无头浏览器一张表选对选型别看参数先问自己一个问题我要抓的内容在原始 HTML 里有没有内容已经在 HTML 里服务器直接把内容吐给你服务端渲染的站点、接口化的列表页用CheerioCrawler。它本质是纯 HTTP 请求加 HTML 解析Cheerio 是一个 jQuery 风格的解析库不启动浏览器单页耗时以百毫秒计。内容是 JS 渲染的页面打开先是一片空白脚本执行完才出数据——这种必须跑真实浏览器。PlaywrightCrawler能控制 Chromium、Chrome、Firefox、WebKit 多种浏览器PuppeteerCrawler只控制 Chromium/Chrome但生态成熟适合已有 Puppeteer 脚本的团队。新手需要浏览器时官方建议直接选 Playwright。爬虫类能否执行 JS启动开销支持的浏览器典型用例CheerioCrawler❌最低纯 HTTP 请求—静态列表页、API 类数据PlaywrightCrawler✅中等启动真浏览器Chromium/Firefox/WebKit动态渲染页、跨浏览器验证PuppeteerCrawler✅中等Chromium/ChromeChrome 深度控制、存量脚本迁移核心机制拆解请求队列与 DatasetCrawlee 值回票价的地方不在爬虫类本身而在它替你管的两件事请求队列和数据持久化。请求队列不用自己写爬取循环crawler.run()传入起始 URL 后Crawlee 内部维护一个队列取出一个、交给requestHandler、处理完再取下一个并发数由它自己按机器负载调整。你在处理器里调用enqueueLinks()它就把当前页面的链接去重后塞回队列——递归爬取就是这么简单不需要手写循环也不需要自己维护已访问集合。Dataset数据自动落盘Dataset.pushData()把一个对象追加进数据集文件直接写到./storage/datasets/default/目录每个对象一个 JSON 文件带序号命名{ url: https://example.com/products, names: [无线鼠标, 机械键盘] }进程中途崩掉也没关系已推送的数据都在磁盘上重跑时不会丢。把两个机制合起来一个能递归爬取的商品归档器就十几行import { CheerioCrawler, Dataset } from crawlee; const crawler new CheerioCrawler({ async requestHandler({ $, request, enqueueLinks }) { // 从列表页提取商品名 const names $(.product-name).map((_, el) $(el).text()).get(); await Dataset.pushData({ url: request.url, names }); // 把页面链接入队Crawlee 自动去重、自动调度 await enqueueLinks({ selector: a }); }, }); await crawler.run([https://example.com/products]);从 Demo 到生产持久化、重试、反屏蔽一套配置演示代码直接上线会踩两类坑请求偶尔失败超时、403以及对方识别了你的爬虫。生产配置一并在构造函数里解决import { PlaywrightCrawler, Dataset, SessionPool, ProxyConfiguration } from crawlee; const proxy new ProxyConfiguration({ proxyUrls: [http://user:passhost:8000], // 你的代理池 }); const crawler new PlaywrightCrawler({ proxyConfiguration: proxy, // 请求轮换出口 IP sessionPool: new SessionPool(), // 会话 IP cookie 指纹 maxRequestRetries: 3, // 失败请求自动重排队重试 maxRequestsPerCrawl: 1000, // 给本次爬取设上限防跑飞 async requestHandler({ page, request }) { await Dataset.pushData({ url: request.url, title: await page.title() }); }, }); await crawler.run([https://example.com]);几个要点逐条说。maxRequestRetries是全局重试上限失败的请求会被重新入队而不是直接丢弃SessionPool会话池把 IP、cookie、浏览器指纹绑成一个身份整体轮换新指纹永远配新 IP不会出现换了 IP 但 cookie 还是旧的这种穿帮proxyConfiguration负责 IP 这一半。数据出仓用Dataset.exportToCSV(products)或exportToJSON一键导出成文件。常见坑与排错新手最常踩的三个场景浏览器起不来缺二进制和系统依赖装了playwright包不等于装了浏览器二进制是分开下载的npx playwright install # 下载浏览器二进制服务器上还会缺系统共享库浏览器进程直接崩。部署到服务器时推荐用官方 Docker 镜像浏览器和依赖都预装好了见 Docker 镜像指南。重试、超时与爬跑飞请求对象上有retryCount字段记录已重试次数你可以在处理器里检查它对反复失败的 URL 放弃或换策略。页面加载超过导航超时可用navigationTimeoutMs调整会按失败处理走上面的重试流程。另一个高频坑enqueueLinks()不加范围限制会把整站队列塞爆起步阶段务必先用maxRequestsPerCrawl兜底确认行为符合预期再放开。代码跑不起来ESM 没开用import语法但node main.js报语法错是因为项目没声明 ES 模块。在package.json里加type: module或者把文件后缀改成.mjs。延伸与资源官方快速上手三种爬虫的最小可运行示例和本文第一条命令配套结果存储指南Dataset、键值存储的完整用法反屏蔽指南指纹、会话、代理三层机制的深入配置把示例里的起始 URL 换成你自己的站点加上enqueueLinks跑一遍 Crawlee 递归爬取的完整流程【免费下载链接】crawleeCrawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or GPTs. Download HTML, PDF, JPG, PNG, and other files from websites. Works with Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP. Both headful and headless mode. With proxy rotation.项目地址: https://gitcode.com/GitHub_Trending/cr/crawlee创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表