Как разобрать определенную переменную javascript на странице HTML? - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть приложение 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>

Меня не волнует что-либо , кроме содержимого бара.

Как мне попасть в бар, а затем пройти по нему, чтобы проанализировать содержимое json в баре?

Ответы [ 4 ]

0 голосов
/ 16 февраля 2012
json = JSON.parse($1) if html =~ /var bar = (.*);/
0 голосов
/ 16 февраля 2012

Можете ли вы сказать мне, на что похож объект json?Если структура всегда одна и та же, то вы можете просто получить прямой доступ ко всему, вам не нужно перебирать ее, используя цикл.var test = jsonObject.something.something и т. д.

0 голосов
/ 16 февраля 2012

Предполагая, что 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>

Вы могли бы сделать немного Руби, как

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 голосов
/ 16 февраля 2012
var foo = "abc";               
var bar = {interesting_json_here};
var baz = "xyz";
for(var i in bar) {
    alert(bar[i]['json_key']);
}
...