Ruby on rails 使用Nokogiri-Ruby/Rails从脚本中提取变量值
我有一段代码,它把所有的脚本都放在一个页面上Ruby on rails 使用Nokogiri-Ruby/Rails从脚本中提取变量值,ruby-on-rails,ruby,nokogiri,Ruby On Rails,Ruby,Nokogiri,我有一段代码,它把所有的脚本都放在一个页面上 full_url = URI.join(url, "/").to_s #https://www.example.com doc = Nokogiri::HTML(URI.open(full_url)) doc.css('script').each do |script| puts script.content end 这非常有效,可以返回页面上的所有脚本。然而,这使得它比需要的更复杂,因为我只需要一个脚本,一个带有类
full_url = URI.join(url, "/").to_s #https://www.example.com
doc = Nokogiri::HTML(URI.open(full_url))
doc.css('script').each do |script|
puts script.content
end
这非常有效,可以返回页面上的所有脚本。然而,这使得它比需要的更复杂,因为我只需要一个脚本,一个带有类“analytics”的脚本
所以我只想返回值“pop1”和“1.1.2”
只有一个window.TEST.gameName和window.TEST.gameVersion实例,因此它们是唯一的。也许我用Nokogiri把它复杂化了,我应该用正则表达式,或者这样会更快
我也不喜欢Nokogiri,只是这似乎是最受欢迎的选择
我尝试了使用doc.at和doc.search的几种变体,但我一直没有得到任何回报,所以我可能做得不正确。需要一段时间<代码>脚本.分析查找分析类的脚本标记
doc.css('script.analytics').each do |script|
puts script.content
end
至于第二部分,
window.TEST.gameName=“pop1”代码>是Javascript。Nokogiri帮不了你。您需要一个Javascript解析器。以Schwern的问题为基础,回答完整的问题
我曾经
doc.css('script.analytics').each do |script|
@script = script.content
end
这给了我一个脚本,大约有一百行javascript,总是以相同的格式,只是不同的值
然后我做了:
game_name = @script.match(/window.TEST.gameName = "(.*?)";/m)[1].strip # returns pop1
game_version = @script.match(/window.TEST.gameVersion = "(.*?)";/m)[1].strip # returns 1.1.2
可能还有更好的方法,但这对我来说很有效
doc.css('script.analytics').each do |script|
@script = script.content
end
game_name = @script.match(/window.TEST.gameName = "(.*?)";/m)[1].strip # returns pop1
game_version = @script.match(/window.TEST.gameVersion = "(.*?)";/m)[1].strip # returns 1.1.2