如何解析HTML页面中的特定javascript变量?

时间:2012-02-15 23:40:25

标签: javascript ruby-on-rails ruby screen-scraping

我有一个Ruby / Rails应用程序,我正在尝试屏幕抓取一个页面以获取一些数据。这是html的样子:

<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>

除了bar的内容外,我不关心 任何

如何进入bar然后遍历它来解析bar中json的内容?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你能告诉我json对象是什么样的吗?如果结构始终相同,那么您可以直接访问所有内容,您不需要使用循环迭代它。 var test = jsonObject.something.something等。

答案 2 :(得分: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将在一条线上。

答案 3 :(得分:0)

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