使用 Apify Puppeteer 爬行时的内存问题
Memory issue on using Apify Puppeteer crawling
我一直在做一个 Python 项目,用户向程序提供一长串 URL(比如说 100 个 URL),程序将生成 100 个进程来执行 JavaScript 代码,其中包含爬虫代码(使用 Apify.launchPuppeteer()
)。而且JavaScript代码是基于Apify Puppeteer单页模板创建和修改的
但是100个进程同时调用爬虫代码会占用大量内存,导致卡顿。由于 Python 代码正在等待从 JavaScript 代码写入的文件中读取结果,内存不足会极大地影响性能并引发文件写入错误。我想知道有没有什么方法可以优化 JavaScript 爬虫代码,或者是否有任何可以在双方进行改进的方法?
一些编辑---
关于该程序的额外信息:用户正在提供一个 URL(域)列表,该程序想要递归地爬取该域中的所有链接(例如,爬取该域 github.com 的所有超链接)。
完全没有必要启动 100 个单独的抓取进程。 Apify 提供的爬虫 类 可以抓取一个列表或队列中的全部 URL。它们还管理并发性,因此 运行 保持在 CPU 和内存限制内。我们通常会抓取数百万个没有显着内存或 CPU 问题的 URL。我会使用 PuppeteerCrawler.
我一直在做一个 Python 项目,用户向程序提供一长串 URL(比如说 100 个 URL),程序将生成 100 个进程来执行 JavaScript 代码,其中包含爬虫代码(使用 Apify.launchPuppeteer()
)。而且JavaScript代码是基于Apify Puppeteer单页模板创建和修改的
但是100个进程同时调用爬虫代码会占用大量内存,导致卡顿。由于 Python 代码正在等待从 JavaScript 代码写入的文件中读取结果,内存不足会极大地影响性能并引发文件写入错误。我想知道有没有什么方法可以优化 JavaScript 爬虫代码,或者是否有任何可以在双方进行改进的方法?
一些编辑--- 关于该程序的额外信息:用户正在提供一个 URL(域)列表,该程序想要递归地爬取该域中的所有链接(例如,爬取该域 github.com 的所有超链接)。
完全没有必要启动 100 个单独的抓取进程。 Apify 提供的爬虫 类 可以抓取一个列表或队列中的全部 URL。它们还管理并发性,因此 运行 保持在 CPU 和内存限制内。我们通常会抓取数百万个没有显着内存或 CPU 问题的 URL。我会使用 PuppeteerCrawler.