2013-03-14 49 views
1

慢慢地到達那裏,我試圖實現。我通過屏幕抓取抓取數據,並希望將數據保存到我的模型中,我有兩列,home_team和away_team。到目前爲止,我抓住了數據。將散列的內容保存到模型

FIXTURE_URL = "http://www.bbc.co.uk/sport/football/premier-league/fixtures" 

def get_fixtures # Get me all Home and away Teams 
doc = Nokogiri::HTML(open(FIXTURE_URL)) 
home_team = doc.css(".team-home.teams").map {|h| h.text.strip } 
away_team = doc.css(".team-away.teams").map {|a| a.text.strip } 
#team_clean = Hash[:home_team => home_team, :away_team => away_team] 
#team_clean = Hash[:team_clean => [Hash[:home_team => home_team, :away_team => away_team]]] 
end 

我已經散列了獲取數據到一個哈希的方式有兩種,一種是散,另一個是散列中的散列,我不知道我需要哪一個(如果有的話?)

所以,如果我想保存從我HOME_TEAM接收到的數據我運行耙子任務來完成

def update_fixtures #rake task method 
Fixture.destroy_all 
get_fixtures.each {|home| Fixture.create(:home_team => home)} 
end 

我想要實現的是能夠節省HOME_TEAM和AWAY_TEAM在同一時間。我是否需要訪問哈希中的數據,如果是這樣的話?這裏有點失落,但是這是我第一次嘗試這種

任何幫助表示讚賞

+0

你可以發佈一些HTML或鏈接到FIXTURE_URL嗎? – Sam 2013-03-14 11:44:57

+0

道歉,鏈接到更新的網址 – Richlewis 2013-03-14 11:46:51

回答

2

試試這個,

FIXTURE_URL = "http://www.bbc.co.uk/sport/football/premier-league/fixtures" 

def get_fixtures # Get me all Home and away Teams 
    doc = Nokogiri::HTML(open(FIXTURE_URL)) 
    matches = doc.css('tr.preview') 
    matches.each do |match| 
    home_team = match.css('.team-home').text.strip 
    away_team = match.css('.team-away').text.strip 
    Fixture.create!(home_team: home_team, away_team: away_team) 
    end 
end 

這將遍歷匹配,並與遠及家庭創建一個新的Fixture每場比賽的球隊。

編輯:

新增.text.strip

編輯2:

這應該讓你的日期也

FIXTURE_URL = "http://www.bbc.co.uk/sport/football/premier-league/fixtures" 

def get_fixtures # Get me all Home and away Teams 
    doc = Nokogiri::HTML(open(FIXTURE_URL)) 
    days = doc.css('#fixtures-data h2').each do |h2_tag| 
    date = Date.parse(h2_tag.text.strip) 
    matches = h2_tag.xpath('following-sibling::*[1]').css('tr.preview') 
    matches.each do |match| 
     home_team = match.css('.team-home').text.strip 
     away_team = match.css('.team-away').text.strip 
     Fixture.create!(home_team: home_team, away_team: away_team, date: date) 
    end 
    end 
end 

這是一個有點比以前更復雜因爲它必須使用一些XPath來調用h2標籤之後的下一個HTML元素包含日期。

它通過循環在div#fixtures-data HTML所有h2 html標籤則每個h2後抓住table標籤下方/。

+0

驚人的作品,現在的理解部分...所以tr.preview保存了比賽信息,然後我們通過每次預覽抓住主隊和客隊信息,然後創建只是讓我們在模型中創建一個記錄,如果你能解釋任何我已經歪曲的東西,那就太好了 – Richlewis 2013-03-14 12:00:43

+0

聽起來對我來說:)'tr.preview'抓取所有匹配/夾具錶行,並從本質上創建一個包含內部HTML的數組每個'tr.preview'行。循環抓取數組中的每個HTML行片段,並進一步查詢「.team-home」和「.team-away」。 – Sam 2013-03-14 12:14:07

+0

所以我這樣做是錯誤的方式,謝謝你爲我清理,快速問題,然後,如果我想抓住包括日期在內的裝置,我可以按照類似的模式進行匹配= doc.css「.fixtures-table full-表中「),那麼我可以循環內的內容? – Richlewis 2013-03-14 12:18:01