我已经迁移了一个爬虫到一个任务与遗留-幻影-爬虫(任务版本)和,出于效率和更好的设计的原因,重新开发它作为一个纯粹的行为使用PuppeterCrawler (行为版本)。比较两个版本,原来Task-Verion的速度大约是Act-Verion的两倍。我怀疑这与设置的差异有关,特别是根据导航超时。但我不确定。
为什么刮刀作为一项任务比作为一项行为更快,具有大致相同的逻辑?使用PuppeterCrawler的动作和使用遗留幻影爬虫的任务之间的设置有什么不同?如何使用PuppeterCrawler设置动作,以便获得与使用遗留幻影爬虫的任务相同的性能?
干杯沃尔夫冈
发布于 2019-10-08 17:43:02
造成这种差异的原因是这两个解决方案中使用的底层技术。
legacy-phantomjs-crawler使用PhantomJS作为呈现引擎。PhantomJS非常快,但遗憾的是,它不再被开发人员支持,许多网站在检测到PhantomJS时会禁止访问。此外,它不支持现代javascript (es6 and later),因此一些现代网站无法加载。
PuppeteerCrawler使用通过javascript控制的铬/铬浏览器作为渲染引擎。这比PhantomJS慢,因为有更多的进程在运行,但现代网站和屏蔽PhantomJS的网站通常在它上面工作得很好。
还有一个选择,那就是CheerioCrawler,它甚至比PhantomJS更快,因为它甚至不渲染网站和处理javascript,它只与加载的页面的HTML一起工作。如果您想访问的网站不使用javascript加载数据,并且没有针对正常网络请求的保护,这通常是最好的选择。
遗憾的是,在我们的软件开发工具包中,我们不再提供对PhantomJS的支持,主要是因为我们遇到了越来越多的页面阻塞或无法加载的问题。您可以通过阻止不需要的资源并在导航过程中等待正确的事件来加速傀儡爬行器。例如,Here就是一个可以帮助你阻止不需要从页面加载的内容的函数。
https://stackoverflow.com/questions/58283066
复制相似问题