Nokogiri - 在 javascript 数组中找到值
Nokogiri - find the value inside a javascript array
我正在尝试使用 nokogiri 删除某些内容,我想获取 JavaScript 数组中的值,例如此代码中 'b' 的值。
<script>
var foo = [bar, [a, b, c , d], value, some value, . . ]
</script>
我使用doc.search("script")[18].content
得到了脚本块,我如何在这里得到'b'的值?
所以首先 install gem rkelly-remix
,rkelly 似乎被遗弃了,remix 执行 es6(sweet)。
需要 'rkelly' 并实例化解析器 parser = RKelly::Parser.new
然后像这样抓取脚本:
doc = '<script> var foo = [bar, [a, b, c , d], 1, 2, 3, 4] </script>'
d = Nokogiri::HTML doc
js = d.search('script').text
接下来用 Rkelly-remix 解析它。
ast = parser.parse(js)
然后您可以遍历然后节点并使用它们的值。你的例子似乎有点不完整,所以我不能提供更多。如果您想进一步询问 b
,您将需要更多设置值的 js。如果需要,您可以从这里使用 execjs 或 ruby racer 来评估 js。
希望对您有所帮助!
你可以很容易地做到这一点:
require 'nokogiri'
doc = Nokogiri::HTML('<script>
var foo = [bar, [a, b, c , d], value, some value, . . ]
</script>
')
js = doc.at('script').text
right_side = js.split('=', 2).last
b = right_side.split(',')[2]
b # => " b"
测试真实值:
require 'nokogiri'
doc = Nokogiri::HTML('<script>
var foo = [bar, [a, 123, c , d], value, some value, . . ]
</script>
')
js = doc.at('script').text
right_side = js.split('=', 2).last
b = right_side.split(',')[2]
b # => " 123"
b.to_i # => 123
缺点是它容易受到 JavaScript 字符串格式变化的影响,这使得它很脆弱。您可以决定是否要走那条路。
请记住,HTML 源中的所有内容都是一个字符串,因此一旦您缩小了要查看的范围,就可以使用正常的字符串处理将其分解。
我正在尝试使用 nokogiri 删除某些内容,我想获取 JavaScript 数组中的值,例如此代码中 'b' 的值。
<script>
var foo = [bar, [a, b, c , d], value, some value, . . ]
</script>
我使用doc.search("script")[18].content
得到了脚本块,我如何在这里得到'b'的值?
所以首先 install gem rkelly-remix
,rkelly 似乎被遗弃了,remix 执行 es6(sweet)。
需要 'rkelly' 并实例化解析器 parser = RKelly::Parser.new
然后像这样抓取脚本:
doc = '<script> var foo = [bar, [a, b, c , d], 1, 2, 3, 4] </script>'
d = Nokogiri::HTML doc
js = d.search('script').text
接下来用 Rkelly-remix 解析它。
ast = parser.parse(js)
然后您可以遍历然后节点并使用它们的值。你的例子似乎有点不完整,所以我不能提供更多。如果您想进一步询问 b
,您将需要更多设置值的 js。如果需要,您可以从这里使用 execjs 或 ruby racer 来评估 js。
希望对您有所帮助!
你可以很容易地做到这一点:
require 'nokogiri'
doc = Nokogiri::HTML('<script>
var foo = [bar, [a, b, c , d], value, some value, . . ]
</script>
')
js = doc.at('script').text
right_side = js.split('=', 2).last
b = right_side.split(',')[2]
b # => " b"
测试真实值:
require 'nokogiri'
doc = Nokogiri::HTML('<script>
var foo = [bar, [a, 123, c , d], value, some value, . . ]
</script>
')
js = doc.at('script').text
right_side = js.split('=', 2).last
b = right_side.split(',')[2]
b # => " 123"
b.to_i # => 123
缺点是它容易受到 JavaScript 字符串格式变化的影响,这使得它很脆弱。您可以决定是否要走那条路。
请记住,HTML 源中的所有内容都是一个字符串,因此一旦您缩小了要查看的范围,就可以使用正常的字符串处理将其分解。