2012-12-01 73 views
2

我知道如何從外部網站拉動HTML內容並解析它,但問題是,我想提取的內容是由JavaScript函數生成的。從外部網站拉內容生成javascript

的代碼看起來是這樣的:

<div align="left"> 
    <div id="divCotizaciones"></div> 
    <script type="text/javascript"> 
      getCotizaciones("cotizaciones_busca.dat"); 
    </script> 
    </div> 

我想提取由該函數產生的所有的內容。 這是從那裏我試圖拉內容的網頁:http://www.bvl.com.pe/neg_rv_alfa.html#

我想這一點,但它不工作:

$html = new DOMDocument(); 
$html->loadHtmlFile('http://www.bvl.com.pe/neg_rv_alfa.html#'); 
$xpath = new DOMXPath($html); 
$nodelist = $xpath->query('//*[@id="div"]/div[4]'); 
echo $output = $nodelist->item(0)->nodeValue; 

// and this is the output I get: getCotizaciones("cotizaciones_busca.dat"); 
+0

你將需要一個JavaScript引擎,如:[v8](http://www.php.net/manual/en/book.v8js.php)或[的SpiderMonkey](http://pecl.php.net/package/spidermonkey)。 –

回答

1

不幸的是,你可以使用DOM或任何其他PHP函數不執行JavaScript代碼加載外部來源,例如get_file,curl等。您需要JavaScript編譯器,或者編程語言需要一個插件來編譯JavScript(例如C++上的WebKit)。PHP沒有這種支持。

但是,您可以做的是查看數據在瀏覽器中的生成方式以及它如何顯示該數據。我爲你做了這件事,並發現網格是通過向不同的URL發出請求而生成的。因此,不要調用'http://www.bvl.com.pe/neg_rv_alfa.html#',它調用JavaScript函數getCotizaciones("cotizaciones_busca.dat");,然後使用ajax調用此URL。

http://www.bvl.com.pe/includes/cotizaciones_busca.dat

這個網址是你需要的數據和您通過DOM或加載任何>

普羅蒂普:使用Firebug或任何你選擇的瀏覽器開發工具的控制檯。每當你看到ajax請求時,看看它做了什麼,它在哪裏發出請求,以及什麼是參數。檢查存儲函數的js文件的來源。看看它做了什麼。在你的實例http://www.bvl.com.pe/js/cabecera_pie.js中,你會看到它調用一個ajax請求,這取決於用戶點擊了什麼。在domload之前複製在phpb等

0

我不認爲有可能只使用PHP。

但是,您可以在單獨的進程中運行瀏覽器,讓它加載頁面並執行javascript,然後您可以獲取結果。

這很容易使用PhantomJS - http://phantomjs.org/

您將不得不準備JavaScript文件,以加載頁面,在必要時模擬用戶輸入,瀏覽DOM並使用PhantomJS文件API將結果保存到某處,然後將結果加載到PHP中。你可以從例子開始 - 看看https://github.com/ariya/phantomjs/blob/master/examples/pizza.js