我正在执行屏幕抓取以获得足球结果,并且分数以字符串形式出现,例如2-2。我理想的是将得分分为home_score和away_score,然后将其保存到我的模型中以获得每个结果
目前我这样做
def get_results # Get me all results
doc = Nokogiri::HTML(open(RESULTS_URL))
days = doc.css('.table-header').each do |h2_tag|
date = Date.parse(h2_tag.text.strip).to_date
matches = h2_tag.xpath('following-sibling::*[1]').css('tr.report')
matches.each do |match|
home_team = match.css('.team-home').text.strip
away_team = match.css('.team-away').text.strip
score = match.css('.score').text.strip
Result.create!(home_team: home_team, away_team: away_team, score: score, fixture_date: date)
end
end
从进一步的阅读中我可以看到你可以使用.split方法
.split("x").map(&:to_i)
我也可以这样做
score.each do |s|
home_score, away_score = s.split("-").map(&:to_i)
Result.create!(home_score: home_score, away_score: away_score)
end
但是如何整合到我当前的设置中,即使我的逻辑是正确的,但是我仍然希望将home_score和away_score分配给正确的结果
提前感谢您提供任何帮助
修改
好的到目前为止答案是否定的我不能这样做,运行rake任务后我得到一个错误
undefined method `each' for "1-2":String
原因.each不起作用是因为每个都是ruby 1.8中String的一个方法,它在Ruby 1.9中删除了。我已经尝试过each_char,它现在可以保存一些结果而不是其他结果,当它确实保存了home_score并且off_score没有正确分配
答案
正如@seph指出的那样,每个都不需要,如果它帮助其他任何人我的最终任务看起来像这样
def get_results # Get me all results
doc = Nokogiri::HTML(open(RESULTS_URL))
days = doc.css('.table-header').each do |h2_tag|
date = Date.parse(h2_tag.text.strip).to_date
matches = h2_tag.xpath('following-sibling::*[1]').css('tr.report')
matches.each do |match|
home_team = match.css('.team-home').text.strip
away_team = match.css('.team-away').text.strip
score = match.css('.score').text.strip
home_score, away_score = score.split("-").map(&:to_i)
Result.create!(home_team: home_team, away_team: away_team, fixture_date: date, home_score: home_score, away_score: away_score)
end
end
end
答案 0 :(得分:2)
不需要每一个。这样做:
home_score, away_score = score.split("-").map(&:to_i)