これで少し迷った。nokogiri を使用してhttp://www.bbc.co.uk/sport/football/tablesからテーブル データを取得しています。必要なデータの一部を取得する方法がわからないため、SO からいくつかの助けを借りました。
require 'open-uri'
require 'nokogiri'
url = 'http://www.bbc.co.uk/sport/football/tables'
doc = Nokogiri::HTML.parse(open url)
teams = doc.search('tbody tr.team')
keys = teams.first.search('td').map do |k|
k['class'].gsub('-', '_').to_sym
end
hsh = teams.flat_map do |team|
Hash[keys.zip(team.search('td').map(&:text))]
end
puts hsh
これのいくつかについては少し不明です。たとえば、最終出力 hsh がこのハッシュを与えることがわかります
{:statistics=>"", :position=>"No movement 20", :team_name=>"Reading", :played=>"33", :home_won=>"4", :home_drawn=>"7", :home_lost=>"6", :home_for=>"23", :home_against=>"31", :away_won=>"1", :away_drawn=>"2", :away_lost=>"13", :away_for=>"13", :away_against=>"32", :goal_difference=>"-27", :points=>"24", :last_10_games=>"\n Draw\nWin\nLoss\nLoss\nLoss\nLoss\nLoss\nLoss\nLoss\nDraw", :status=>"\n Report of Reading's last match "}
{:statistics=>"", :position=>"No movement 19", :team_name=>"QPR", :played=>"33", :home_won=>"2", :home_drawn=>"8", :home_lost=>"6", :home_for=>"12", :home_against=>"23", :away_won=>"2", :away_drawn=>"4", :away_lost=>"11", :away_for=>"17", :away_against=>"31", :goal_difference=>"-25", :points=>"24", :last_10_games=>"\n Draw\nDraw\nLoss\nLoss\nWin\nWin\nLoss\nLoss\nDraw\nLoss", :status=>"\n Report of QPR's last match "}
だから私の考えは、各 :team_name を取得するには、通常のようにループを通過することです
hsh.each do |k,v]
v['team_name']
end
これで、すべてのハッシュの team_name の値が得られるでしょうか? 私が達成しようとしているのはNokogiri で要素を抽出することですが、提供されたソリューションを理解し、各値をモデルに保存したいと思います
誰かが理解を明確にするのを手伝ってくれませんか
ありがとう