2014-07-25 42 views
3

我想寫一個應用程序,刮流星網頁。這是相當困難的,因爲流星網頁最初完全呈現爲Javascript。是否有某種方式可能用某種刮板渲染頁面?Web刮流星頁面

可能要做節點,如果有幫助。

感謝

+0

連接到站點的DDP服務器並通過調用相關方法/訂閱獲取數據可能會更簡單。這樣數據就會以一種有用的格式存在,而不需要刮掉它,並且如果它們改變了HTML佈局,它也不會中斷。這是一個節點DDP客戶端:https://www.npmjs.org/package/ddp – user3374348

回答

5

您可以使用phantomjs來呈現網頁。這是一個例子,專門針對網頁流星設計,(從spiderable)捕捉到他們的HTML:

var fs = require('fs'); 
var child_process = require('child_process'); 

console.log('Loading a web page'); 

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

page.open("http://localhost:3000", function(status) { 

}); 

var i = 0; 

setInterval(function() { 
    var ready = page.evaluate(function() { 
      if (typeof Meteor !== 'undefined' 
       && typeof(Meteor.status) !== 'undefined' 
       && Meteor.status().connected) { 
       Deps.flush(); 
       return DDP._allSubscriptionsReady(); 
      } 
      return false; 
    }); 

    console.log("Ready", ready); 

    if (ready) { 
      var out = page.content; 
      console.log(out); 
      phantom.exit(); 
    } 
}, 100); 

它是這樣,但你可以換輸出,並使用require('child_process').execstdin捕捉它。

您可以使用phantomjs script.js運行代碼,它會讓您返回流星頁面的HTML。

+0

我試過這與[流星文檔]和一切正常工作在瀏覽器(火狐)控制檯,但'phantomjs'無法找到流星變量。有任何想法嗎? –

1

如果他們已經啓用了spiderable包,那麼你就可以假裝是一個網絡爬蟲獲取服務器來渲染頁面。

如果您不控制服務器或未啓用服務器,則可能必須使用Selenium - 但爬網會佔用CPU並且速度很慢。