首页 > 解决方案 > 使用 Apify Puppeteer 爬行的内存问题

问题描述

我一直在做一个 Python 项目,用户向程序提供一长串 URL(比如说 100 个 URL),程序将生成 100 个进程来执行包含爬虫代码的 JavaScript 代码(使用Apify.launchPuppeteer())。此外,JavaScript 代码是基于 Apify Puppeteer 单页模板创建和修改的。

但是,100个进程同时调用爬取代码会占用大量内存,导致卡顿。由于 Python 代码正在等待从 JavaScript 代码写入的文件中读取结果,因此内存不足会极大地影响性能并引发文件写入错误。我想知道是否有任何方法可以优化 JavaScript 爬虫代码,或者是否可以对双方进行任何改进?

一些编辑 --- 关于程序的额外信息:用户正在给出一个 URL(域)列表,并且程序想要递归地爬取域中的所有链接(例如,爬取域 github.com 中的所有超链接)。

标签: javascriptpythonweb-crawlerpuppeteerapify

解决方案


完全没有必要启动 100 个单独的爬取进程。Apify 提供了爬虫类,它们可以抓取一个列表或一个充满 URL 的队列。它们还管理并发,因此运行保持在 CPU 和内存限制内。我们通常会抓取数百万个 URL,而不会出现显着的内存或 CPU 问题。我会使用PuppeteerCrawler


推荐阅读