2013-11-26 80 views
5

我需要下載以下網頁:http://m.10bet.com/#leage_panel#10096網站刮:等待網站加載完全地

這是一個體育競猜頁面,我需要引號。所以,首先這看起來很簡單。然而,這裏是發生了什麼(你可以用如檢查該瀏覽器的開發者工具):

  1. 打開URL
  2. 在頁面加載的是隨後調用一個Ajax請求檢索報價初始HTML
  3. 但是,引用包含在json中,但是它們被obfruscated,因此無法直接從ajax調用直接解析它們。另外,該網頁的JavaScript也是obfruscated。所以沒有機會直接從請求中讀取引號。

取而代之,我需要使用能夠評估javascript的無頭瀏覽器。 HtmlUnit for java是不夠的,因爲它不提供強大的JavaScript功能。因此PhantomJS與CasperJS結合是我目前的選擇。我使用以下腳本來應用CasperJS:

var casper = require('casper').create(); 

casper.start('http://m.10bet.com/#leage_panel#10096', function() { 
    var url = 'http://m.10bet.com/#leage_panel#10096'; 
    this.download(url, '10bet.html'); 
}); 

casper.run(function() { 
    this.echo('Done.').exit(); 
}); 

但是,此腳本不加載完整頁面。只是inital頁面。如何在瀏覽器中顯示完整的網頁?

+0

我對這些工具並不熟悉,但可以將代碼附加到'domready'事件嗎?這可能會做到。 – halfer

回答

7

該腳本看起來像一個很好的開始,但只要您的(HTML)頁面加載,(CasperJS)腳本就會停止,因爲您還沒有給出任何更多說明。解決這個問題的最原始的方法是去睡覺了幾秒鐘,然後刮頁:

var casper = require('casper').create(); 
var fs=require('fs'); 

casper.start('http://m.10bet.com/#leage_panel#10096', function() { 
    this.wait(2000, function() { 
     fs.write("10bet.html", this.getHTML()); 
    }); 
}); 

casper.run(); 

一個2000毫秒超時是原油有兩個原因:

  1. 如果數據加載比您浪費時間更快。
  2. 如果加載速度較慢,則腳本不起作用。

因此,最好在頁面上標識出你想要的東西,然後使用Casper的waitForXXX()函數之一。從這裏開始查看API文檔:http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitfor

另一點,我猜你實際上並不想要整個HTML頁面,只是其中的數據。 getHTML()需要一個參數來過濾收到的內容。例如。在你的情況下,getHTML('#league_block')可能會更有用。再次參閱API文檔以獲得更多的想法。

+0

嘿達倫!你太快了。我只想發表你的建議作爲我的問題的答案。我使用了waitForResource(...)。完美的工作。謝謝你的幫助! :) – toom