0

我已经将爬虫迁移到带有 legacy-phantomjs-crawler (Task-Version) 的 Task 中,并且出于效率和更好设计的原因,使用 PuppeterCrawler (Act-Version) 将其重新开发为纯 Act。比较两个版本,结果发现 Task-Verion 比 Act-Verion 快两倍。我怀疑这与设置差异有关,尤其是根据导航超时。但我不确定。

为什么刮板作为一个任务比作为一个动作更快,或多或少相同的逻辑?带有 PuppeterCrawler 的 Act 和带有 legacy-phantomjs-crawler 的 Task 之间的设置差异是什么?如何使用 PuppeterCrawler 设置 Act,以便获得与使用 legacy-phantomjs-crawler 的任务相同的性能?

干杯沃尔夫冈

4

1 回答 1

0

造成这种差异的原因是这两种解决方案中使用的底层技术。

legacy-phantomjs-crawler使用PhantomJS作为渲染引擎。PhantomJS 非常快,但遗憾的是,开发人员不再支持它,并且许多网站在检测到 PhantomJS 时会禁止访问。此外,它不支持现代 javascript(es6 及更高版本),因此无法加载一些现代网站。

PuppeteerCrawler使用通过 javascript 控制的 chrome/chromium 浏览器作为渲染引擎。这比 PhantomJS 慢,因为有更多的进程在进行,但现代网站和阻止 PhantomJS 的网站通常在其中运行良好。

还有一个选择,那就是CheerioCrawler,它比 PhantomJS 更快,因为它甚至不渲染网站和处理 javascript,它只适用于加载页面的 HTML。如果您要访问的网站不使用 javascript 加载数据并且没有针对正常网络请求的保护,这通常是最佳选择。

遗憾的是,在我们的 SDK 中,我们不再提供对 PhantomJS 的支持,主要是因为我们遇到了越来越多的页面阻塞或无法加载的问题。您可以通过阻止您不需要的资源并在导航期间等待正确的事件来加速 puppeteer 爬虫。例如,这是一个可以帮助您阻止不需要从页面加载的内容的功能。

于 2019-10-08T09:43:01.597 回答