2012-02-15 75 views
0

我有一個Ruby/Rails應用程序,並試圖屏幕刮一頁來獲取一些數據。這裏的HTML是什麼樣子:如何解析HTML頁面中的特定javascript變量?

<html> 
<head> 
... 
</head> 
<body> 
<h1>Blah</h1> 
<script type="text/javascript" language="JavaScript"> 
var foo = "abc";    
var bar = {interesting_json_here}; 
var baz = "xyz"; 
</script> 
Other uninteresting content and tags here 
</body> 
</html> 

我不關心什麼除了欄的內容。

如何獲得酒吧,然後遍歷它來解析json酒吧的內容?

+0

它「依賴」 - 你能給出一個json的樣本 - 儘量貼近現實。如果bar包含在一行中,並且僅在頁面中出現一次,那麼您可能很懶,並使用正則表達式來提取它。因爲替代方法 - 使用DOM提取JavaScript塊然後解析Javascript更困難。 – 2012-02-16 00:05:18

回答

0
var foo = "abc";    
var bar = {interesting_json_here}; 
var baz = "xyz"; 
for(var i in bar) { 
    alert(bar[i]['json_key']); 
} 
0

你能告訴我什麼是json對象嗎?如果結構總是相同的,那麼你可以直接訪問所有的東西,你不需要用循環遍歷它。 VAR測試= jsonObject.something.something等

+0

假設它總是一樣的 – bachposer 2012-02-15 23:59:55

0

假設HTML看起來像......

<html> 
<head> 
... 
</head> 
<body> 
<h1>Blah</h1> 
<script type="text/javascript" language="JavaScript"> 
var foo = "abc";    
var bar = { "alpha": "beta" }; 
var bar2 = { 'alpha': 'gamma' }; 
var baz = "xyz"; 
</script> 
Other uninteresting content and tags here 
</body> 
</html> 

你可以做一些類似於Ruby,

json_text = the_html.split("\n").each { |l| 
    break $1 if (l.strip =~ /^var bar = (.*);$/) 
} 

require 'rubygems' 
gem 'json' 
require 'json' 
json_data = JSON.parse(json_text) 
puts json_data.inspect 

注:這是一個非常脆弱方法 - HTML結構或JS佈局的變化會破壞事物。

最大的假設是JSON將在一行上。

0
json = JSON.parse($1) if html =~ /var bar = (.*);/