gpt4 book ai didi

selenium - 如何为搜索引擎优化 PhantomJS 以索引单页应用程序?

转载 作者:行者123 更新时间:2023-12-04 04:47:51 25 4
gpt4 key购买 nike

我一直在寻找可以在服务器上运行的 headless 网络浏览器,以便网络爬虫为单页应用程序编制索引。首先我尝试了 HTMLUnit 和 Selenium (HtmlUnitDriver),但似乎它们都有 xhr 请求的问题。

我发现 PhantomJS 性能更好,而且看起来很成熟。 PhantomJS 有一个 internal webserver所以我决定将它与我的反向代理一起使用。然而,我运行了一个基准测试,PhantomJS 100% 达到了 CPU 核心,平均页面加载时间约为 4 秒。原因是我必须等待浏览器加载所有资源才能获得正确的结果。这是我的 PhantomJS 脚本:

var page = require('webpage');
var system = require('system');
var server = require('webserver').create();

// credit: http://backbonetutorials.com/seo-for-single-page-apps/
var service = server.listen(port, { 'keepAlive': true }, function(z, response) {
var request = page.create();
var lastReceived = new Date().getTime();
var requestCount = 0;
var responseCount = 0;
var requestIds = [];
var startTime = new Date().getTime();
request.onResourceReceived = function (response) {
if (requestIds.indexOf(response.id) !== -1) {
lastReceived = new Date().getTime();
responseCount++;
requestIds[requestIds.indexOf(response.id)] = null;
}
};
request.onResourceRequested = function (request) {
if (requestIds.indexOf(request.id) === -1) {
requestIds.push(request.id);
requestCount++;
}
};
request.settings = {
loadImages: false,
javascriptEnabled: true,
loadPlugins: false
};
request.open(z.url, function (status, a) {
if (status !== 'success') {
console.log('FAIL to load the address '+a);
}
});
var checkComplete = function () {
var now = new Date().getTime();
if ((now - lastReceived > 300 && requestCount === responseCount) || now - startTime > 5000) {
clearInterval(checkCompleteInterval);
response.statusCode = 200;
response.headers = {
'Cache': 'no-cache',
'Content-Type': 'text/html; charset=UTF-8',
'Connection': 'Keep-Alive',
'Keep-Alive': 'timeout=5, max=100',
'Content-Length': request.content.length
};
response.write(request.content);
response.close();
request.release();
console.log(request.url+" -> "+(now - startTime));
}
}
var checkCompleteInterval = setInterval(checkComplete, 3);

});

是否有任何改进可以加快脚本速度,我应该使用它的 shell 命令运行 PhantomJS 以获得更好的性能还是这些浏览器有任何替代方案?

最佳答案

你可以用一些 command line switches提高捕获性能:

首先,您可以使用 --load-images=no 忽略所有图像.制作 HTML 快照时无需加载图像。

您还可以使用 --disk-cache=yes 启用缓存(使用 --max-disk-cache-size 以字节为单位设置其大小)

最后, WebPage#onResourceRequested 回调对于中止某些请求(跟踪器、媒体文件...)也很有用 NetworkRequest#abort方法。

关于selenium - 如何为搜索引擎优化 PhantomJS 以索引单页应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17913230/

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