我剛剛寫了我的第一個腳本爲pjscrape,但我發現它運行速度非常緩慢。我對pjscrape和phantomjs都很陌生,所以我不知道哪一個是罪魁禍首。pjscrape很慢,還是PhantomJS?替代刮板?
我從localhost加載文件,所以瓶頸絕對不在傳輸中。
我config.js腳本是這樣的:
pjs.addSuite({
url: 'http://localhost/file.html'.
scraper: function() {
var people = $('table.person');
var results = [];
$.each(people, function() {
var $this = $(this);
results.push({
firstName: $this.find('.firstName').text(),
lastName: $this.find('.lastName').text(),
age: $this.find('.age').text()
});
}
return results;
}
}
然後,我只是執行使用命令行指令here PhantomJS。
~> phantomjs pjscrape.js config.js
我運行在Chrome相同的代碼(只是刮刀()函數),它是即時的。在phantomjs/pjscrape中,它需要30秒。
任何線索是什麼造成緩慢?
有沒有更好的方法來做這個DOM屏幕抓取?也許一個nodejs解決方案?
請出示phantom.js節點代碼。因爲問題可能在那裏。 – moka
@MaksimsMihejevs我是phantom.js的新手,所以我不確定什麼是「節點代碼」。我編輯了我的問題以顯示完整的腳本。對我來說真的沒有太大的意義,所有的工作都是由pjscrape完成的。 –
您是否測量了需要大部分時間執行的內容?由於phantom.js將QT與WebKit結合使用,因此您的節點會要求幻像運行單獨的進程,以啓動並初始化所有複雜組件,以便使「瀏覽器」正常工作。然後你可以加載東西並與之交互。初始化幻像 - 通常是一個瓶頸,因此您可能會考慮初始化一次然後重新使用。請測量瓶頸區域,這可能是幻像的初始化,但不是您上面發佈的腳本。 – moka