2012-02-15 30 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 = (.*);/