2017-01-21 92 views
0

我一直在試圖抓取教育信息網站以保存到我的應用程序數據庫。該網站有三列表如下:用Nokogiri刮掉HTML表並保存到數據庫

<thead> 
<tr height="20"> 
<th height="20" scope="col" width="91">UKPRN</th> 
<th scope="col" width="87">INSTID</th> 
<th scope="col" width="264">Name</th> 
</tr> 
</thead> 
<tbody> 
<tr height="20"> 
<td height="20">10000291</td> 
<td>0047</td> 
<td>Anglia Ruskin University</td> 
</tr> 
<tr height="20"> 
<td height="20">10007759</td> 
<td>0108</td> 
<td>Aston University</td> 
</tr> 
<tr height="20"> 
<td height="20">10000571</td> 
<td>0048</td> 
<td>Bath Spa University</td> 
</tr> 
<tr height="20"> 
<td height="20">10007850</td> 
<td>0109</td> 
<td>The University of Bath</td> 
</tr> 
<tr height="20"> 
<td height="20">10007152</td> 
<td>0026</td> 
<td>University of Bedfordshire</td> 
</tr> 
<tr height="20"> 
<td height="20">10007760</td> 
<td>0127</td> 
<td>Birkbeck College</td> 
</tr> 
<tr height="20"> 
<td height="20">10007140</td> 
<td>0052</td> 
<td>Birmingham City University</td> 
</tr> 
<tr height="20"> 
<td height="20">10006840</td> 
<td>0110</td> 
<td>The University of Birmingham</td> 
</tr> 

等等。我想分別在UKPRN,instid和name下獲得8位數字參考,4位數字參考和學校名稱保存到我的數據庫。

這是頁面上唯一的表格,所以很容易抓取。到目前爲止,我在IRB看起來像這樣的代碼:

require 'nokogiri' 
require 'open-uri' 

page = Nokogiri::HTML(open(url)) 
rows = data.css("tr") 
rows.each do |row| 
    name = row.css("td")[2] 
    ukprn = row.css("td")[0] 
    instid = row.css("td")[1] 
end 

這似乎好的工作,當我打印它似乎拿起正確的數據的變量之一,但我不能讓周圍去掉標籤文本,一旦完成,我不知道如何將這些數據保存到我的institute模型在數據庫中。這些屬性應該與上面給出的名稱相關聯。任何幫助表示讚賞。

回答

2

像這樣的事情

rows = html.css("tbody tr") 
rows.each do |row| 
    ukprn, instid, name = row.css('td').map(&:content) 
    Institute.create!(ukprn: ukprn, instid: instid, name: name) 
end 

我在tbody

只花了 tr小號
+0

我得到'未初始化常量Institute'。有沒有辦法將irb連接到我錯過的應用程序? –

+1

是的,你不應該使用irb,但軌道控制檯 – Ursus

+0

D'oh!我用Rails已經有一段時間了!作品一種享受。謝謝。 –

0
.content 

應該給你只是你有什麼選擇塊內

嘗試name = row.css("td")[2].content

+0

我收到錯誤'NoMethodError:undefined me thil'content'爲nil:NilClass',但沒有'.content'到最後似乎仍然有效。 –

+1

這意味着你有一些'row.css(「td」)[2]'設置爲零值。檢查上面的awnser,看起來很穩固 – Falkwn