2013-09-26 20 views
1

我工作的公司將在幾個月內進行網站重新設計,我們需要的是一個包含網站上每個網頁的每個網址的表格。然後,最佳情況下,會有一列包含一組預定義的JavaScript變量(在本例中爲Omniture變量)的值,因此我們可以確保每個頁面都正確地標記爲其在網站層次結構中的位置。有沒有辦法在每個頁面上抓取一個網站並獲取JavaScript變量?

這裏是什麼可能是在HTML某個網頁的例子:

<script type="text/javascript">  
metrics_level2 = "biz"; 
metrics_level3 = "products"; 
metrics_level4 = "my_awesome_product"; 
metrics_pagename = "biz|products|my_awesome_product";  
</script> 

我爬與RapidMiner的站點和數據準備好去,但我的問題是最好的辦法隔離這些變量並將「metrics_level2」,「metrics_level3」等放在它們自己的列中。 XPath是最好的方法嗎?常用表達?我對XPath的嘗試似乎在標籤之間引入了整個內容,這需要在事實之後進行大量的清理工作。

回答

4

如果您使用PhantomJS http://phantomjs.org/,您可以像使用JavaScript一樣從網頁內部訪問這些變量。一個非常簡單的例子如下:

//where url is the page that contains these variables. 
page.open(url, function (status) { 
    //Page is loaded! 
    var dataFromPage = page.evaluate(function(){ 
     return { 
       metrics_level2:metrics_level2, 
       metrics_level3:metrics_level3, 
       metrics_level4:metrics_level4 
       }; 
    }); 
    //dataFromPage now contains those variables 

    phantom.exit(); 
}); 

如果你已經有你的網頁節衣縮食關到HTML文件或東西,你可以只設置使用content方法放在附近在打開的頁面對象的內容如上所示。見http://phantomjs.org/api/webpage/property/content.html

+0

這是rad!你知道如果這個特定的變量不存在於頁面上會發生什麼? – denverfone

+0

這會在網頁的上下文中拋出一個javascript錯誤,並且您的結果變量'dataFromPage'將返回null ...您應該可能在頁面中處理該錯誤,儘管'if(typeof metrics_level2!='undefined')' –

相關問題