PhantomJS open() 太慢

2023-12-13

我在 NodeJS 中进行网页抓取时遇到问题,我想从远程网页获取一些数据,但数据已从 javascript 插入到 html 中。我开始使用 PhantomJS,它运行得很好,除了一件事阻碍了我完成工作。 PhantomJS 运行速度太慢,这段代码需要大约 14 秒才能执行!?

var page = require('webpage').create();
page.open('https://www.halooglasi.com/nekretnine/izdavanje-stanova/novi-beograd---novi-merkator-id19270/5425485514649', function () {
    phantom.exit();
    });

使用只返回原始数据的请求库,速度要快得多,大约一秒多一点,所以 phantomJS 又工作了 13 秒左右。看起来 PhantomJS 正在做很多我不需要的不必要的操作,我不需要渲染图片视频或任何我只需要 JavaScript 来执行的东西,这样我就可以使用 Cheerio 从 html 获取数据。你能告诉我如何加速 PhantomJS 或者使用其他更快的 webkit 来满足我的需求吗?


您可以采取多种措施来减少处理时间。

1.获得更强大的服务器/计算机(正如马修正确指出的那样).

是的,你可能会说这与问题无关,但在抓取方面却非常重要。在预算为 8 美元的 VPS 上,无需优化您的初始脚本的运行费用9589ms这已经是大约 30% 的改进。

2.关闭图像加载。这会有所帮助...一点。8160ms加载时间。

page.settings.loadImages = false;  

3.分析页面,查找并取消不必要的网络请求。

即使在 Google Chrome 等普通浏览器中,网站加载速度也很慢:使用 AdblockPlus 时需要 129 个请求/8.79 秒加载时间。有很多要求(gif,1Mb),如果它们用于 Facebook、Twitter(用于获取小部件)和广告网站等第三方网站,则有很多。

我们也可以取消它们:

block_urls = ['gstatic.com', 'adocean.pl', 'gemius.pl', 'twitter.com', 'facebook.net', 'facebook.com', 'planplus.rs'];

page.onResourceRequested = function(requestData, request){
    for(url in block_urls) {
        if(requestData.url.indexOf(block_urls[url]) !== -1) {
            request.abort();
            console.log(requestData.url + " aborted");
            return;
        }
    }   
}

我现在的加载时间只是4393ms当页面加载并可用时:PhantomJS 截图

我认为如果不修改页面代码就无法做更多事情,因为从页面源来看,它的脚本量很大。

整个代码:

var page = require('webpage').create();
var fs = require("fs");

// console.time polyfill from https://github.com/callmehiphop/console-time
;(function( console ) {
  var timers;
  if ( !console ) {
    return;
  }
  timers = {};
  console.time = function( name ) {
    if ( name ) {
      timers[ name ] = Date.now();
    }
  };
  console.timeEnd = function( name ) {
    if ( timers[ name ] ) {
      console.log( name + ': ' + (Date.now() - timers[ name ]) + 'ms' );
      delete timers[ name ];
    }
  };
}( window.console ));

console.time("open");

page.settings.loadImages = false;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36';
page.viewportSize = {
  width: 1280,
  height: 800
};

block_urls = ['gstatic.com', 'adocean.pl', 'gemius.pl', 'twitter.com', 'facebook.net', 'facebook.com', 'planplus.rs'];
page.onResourceRequested = function(requestData, request){
    for(url in block_urls) {
        if(requestData.url.indexOf(block_urls[url]) !== -1) {
            request.abort();
            console.log(requestData.url + " aborted");
            return;
        }
    }            
}

page.open('https://www.halooglasi.com/nekretnine/izdavanje-stanova/novi-beograd---novi-merkator-id19270/5425485514649', function () {
    fs.write("longload.html", page.content, 'w');

    console.timeEnd("open");

    setTimeout(function(){
        page.render('longload.png');
        phantom.exit();
    }, 3000);

});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PhantomJS open() 太慢 的相关文章

随机推荐