gpt4 book ai didi

javascript - PhantomJS open() 太慢

转载 作者:搜寻专家 更新时间:2023-10-31 23:31:22 24 4
gpt4 key购买 nike

我在 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 。获得更强大的服务器/计算机(正如 Mathieu 正确指出的那样)

是的,您可能会说这与问题无关,但在抓取方面却非常重要。在没有优化的情况下,预算为 8 美元的 VPS 您的初始脚本运行了 9589ms,这已经提高了约 30%。

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

page.settings.loadImages = false;  

3。分析页面,发现并取消不必要的网络请求。

即使在 Google Chrome 等普通浏览器中,网站加载速度也很慢:AdblockPlus 加载时间为 129 个请求/8.79 秒。 There are a lot of requests (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 screenshot

我不认为如果不修改页面代码就可以做更多的事情,因为从页面源代码来看它是相当繁重的脚本。

完整代码:

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);

});

关于javascript - PhantomJS open() 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42703760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com