我正试图在NBA搜索CBS体育网页以获取投篮数据。 这是我开始使用并作为示例使用的页面:http://www.cbssports.com/nba/gametracker/shotchart/NBA_20131115_MIL@IND
在源代码中,我找到了一个包含我需要的所有数据的字符串。网页源代码中的此字符串直接位于var CurrentShotData = new。
下我想要的是将源中的这个字符串转换为我可以在ruby中使用的字符串。但是,我在语法方面遇到了一些麻烦。这就是我所拥有的。
require 'nokogiri'
require 'mechanize'
a = Mechanize.new
a.get('http://www.cbssports.com/nba/gametracker/shotchart/NBA_20131114_HOU@NY') do |page|
shotdata = page.body.match(/var currentShotData = new String\(\"(.*)\"\)\; var playerDataHomeString/m)[1].strip
print shotdata
end
我知道我一定是做错了......看起来是如此不必要的复杂,最重要的是它对我不起作用。有人可以通过简单的方法来启发我将这个字符串变成Ruby吗?
答案 0 :(得分:0)
尝试替换:
shotdata = page.body.match(/var currentShotData = new String\(\"(.*)\"\)\; var playerDataHomeString/m)[1].strip
使用:
shotdata = page.body.match(/var currentShotData = new String\(\"(.*?)\"\)\; var playerDataHomeString/m)[1].strip
使用(.*)
更改(.*?)
会导致字符串的lazy evaluation(匹配最小字符数),这是您想要的行为。< / p>