gpt4 book ai didi

ruby - 使用 Nokogiri 提取一些 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:36 24 4
gpt4 key购买 nike

require 'open-uri'
require 'json'
require 'nokogiri'

doc = Nokogiri::HTML(open("http://www.highcharts.com/demo/"))

puts doc

但是我想从这个网页中提取json,使用正则表达式似乎不起作用,如何通过XPath提取JSON?

最佳答案

以下是从 URL 访问脚本标签(不引用外部文件)的方法:

require 'open-uri'
require 'nokogiri'
doc = Nokogiri.HTML(open('http://www.highcharts.com/demo/'))
inline_script = doc.xpath('//script[not(@src)]')
inline_script.each do |script|
puts "-"*50, script.text
end

现在您只需要找到您想要的脚本 block 并提取您想要的数据(使用正则表达式)。没有更多详细信息,很难猜测您想要什么以及依赖什么。

这是一个相当脆弱的正则表达式,可以找到我猜你正在寻找的内容:

inline = doc.xpath('//script[not(@src)]').map(&:text)
data = inline.map{ |js| js[/new Highcharts\.Chart\((.+?\})\);/m,1] }.compact[0]
puts data

这是你得到的结果:

{
chart: {
renderTo: 'container',
defaultSeriesType: 'line',
marginRight: 130,
marginBottom: 25
},
title: {
text: 'Monthly Average Temperature',
x: -20 //center
},
subtitle: {
text: 'Source: WorldClimate.com',
x: -20
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
yAxis: {
title: {
text: 'Temperature (°C)'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>'+
this.x +': '+ this.y +'°C';
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
x: -10,
y: 100,
borderWidth: 0
},
series: [{
name: 'Tokyo',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
}, {
name: 'New York',
data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
}, {
name: 'Berlin',
data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
}, {
name: 'London',
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}]
}

注意这不是JSON ;这是一个表示 JavaScript 代码的字符串,包含对象、字符串、数组、数字和函数文字。

关于ruby - 使用 Nokogiri 提取一些 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com