javascript - 使用 Apify Puppeteer 爬行的内存问题
问题描述
我一直在做一个 Python 项目,用户向程序提供一长串 URL(比如说 100 个 URL),程序将生成 100 个进程来执行包含爬虫代码的 JavaScript 代码(使用Apify.launchPuppeteer()
)。此外,JavaScript 代码是基于 Apify Puppeteer 单页模板创建和修改的。
但是,100个进程同时调用爬取代码会占用大量内存,导致卡顿。由于 Python 代码正在等待从 JavaScript 代码写入的文件中读取结果,因此内存不足会极大地影响性能并引发文件写入错误。我想知道是否有任何方法可以优化 JavaScript 爬虫代码,或者是否可以对双方进行任何改进?
一些编辑 --- 关于程序的额外信息:用户正在给出一个 URL(域)列表,并且程序想要递归地爬取域中的所有链接(例如,爬取域 github.com 中的所有超链接)。
解决方案
完全没有必要启动 100 个单独的爬取进程。Apify 提供了爬虫类,它们可以抓取一个列表或一个充满 URL 的队列。它们还管理并发,因此运行保持在 CPU 和内存限制内。我们通常会抓取数百万个 URL,而不会出现显着的内存或 CPU 问题。我会使用PuppeteerCrawler。
推荐阅读
- networking - VPN 和数据包转发
- node.js - NodeJS字符串替换性能-多组xml标签内的换行符
- arrays - PSQL JSON 结果中的双引号问题
- django-rest-framework - 如何仅为当前用户过滤 serializers.ChoiceField 的输出值?
- java - 带有多个图像的 JavaFx 滚动条
- python - YUV 422 转 PNG/JPG/
- c# - Linq 父子查询到 SQL Server
- android-studio - 如果我收到此错误消息,我该怎么办?
- python - Python opencv:在点之间画线并找到完整的轮廓
- c++ - 从布尔到枚举类的隐式转换运算符函数