我有一个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的内容?
答案 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 = (.*);/