我在网站中有262个链接。我在NodeJS服务器中使用Phantom来抓取每个页面以创建HTML快照。我发现在第222页之后,幻像崩溃并出现以下错误:
phantom stderr: 2015-06-10 11:44:20.159 phantomjs[4474:58792] Critical failure: the LastResort font is unavailable.
这已经发生了两次,并且真的很痛苦,因为它需要很长时间来抓取这么多页面。为了记录,当我的页面数量减少时,我从来没有遇到过这个问题,前222页没有错误,所以我不认为问题出在我当前的代码上。但是,如果有人认为帮助我解决这个问题会有用,我会高兴地发帖。
我最初的假设是幻像中的错误,与允许抓取的最大页数有关,或者我可以/应该添加到我的虚拟实例中的设置。
我发现有同样问题的人在这里没有得到解决:https://groups.google.com/forum/#!topic/casperjs/KpDisQL7wxs
代码如下所示:
var crawlPage = function(arr, idx){
// start/end crawl
// --------------------------------
if (!idx) idx = 0;
if (idx >= arr.length) return;
else if (idx === 0) console.log("Starting page crawl");
// visit page
// --------------------------------
phantom.create(function(ph){
ph.createPage(function(page){
page.open(arr[idx], function(status){
//error accessing page
if (status !== "success") return console.log("Unable to access page");
//wait 4s for page to render
setTimeout(function(){
//evaluate page html
page.evaluate(function(){
return document.all[0].outerHTML;
}, function(snapshotHTML){
//strip script tags from html
snapshotHTML = snapshotHTML.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
//save snapshot to file
saveSnapshot(arr[idx], snapshotHTML); //save snapshot file
//crawl next page
crawlPage(arr, idx+1);
//exit page
ph.exit();
});
}, 5000);
});
});
});
}
var siteLinks = [/*array of 262 links*/];
crawlPage(siteLinks);