2016-11-12 34 views
-2

我想將抓取的數據保存到數據庫,以便我可以在其上實現搜索和排序功能。如何從Nokogiri中將抓取的數據保存到Rails數據庫?

我試着創建一個新的Rake任務並更新屬性,但爲此我需要在每次數據被抓取時運行rake fetch-data

應用程序/控制器

def show 
    url = @scrapper.url 
    data = Nokogiri::HTML(open(url)) 
    @doc= data.css(".s-item-container") 
end 

應用程序/視圖/顯示

<% @doc.each do |item| %> 
    <tr> 
    <td><%= item.css(".s-access-title").text %></td> 
    <td><%= item.css(".s-price").text %></td> 
    <td><%= item.css("span+ .a-text-normal").text %></td> 
    </tr> 
<% end %> 

The data I'm getting

它沒有工作。有沒有其他方法可以實現這一點?

+0

需要了解您的系統中的爬網程序現在如何運行? – Muntasim

回答

2
  1. 創建數據庫rake db:create
  2. 創建 '產品' 模型rails g model Product title:string price:decimal rating:float
  3. 創建一個rake任務。解析數據並將其保存在數據庫中。
doc = Nokogiri::HTML(open(@scrapper.url)) 
items = doc.css(".s-item-container") 
items.each do |item| 
    Product.create!(
     title: item.css(".s-access-title").text.strip, 
     price: item.css(".s-price").text.to_d, 
     rating: item.css("span+ .a-text-normal").text.to_f) 
end 

,以防止重複

items.each do |item| 
    title = item.css(".s-access-title").text.strip 
    product = Product.find_or_initialize(title: title) 
    product.price = item.css(".s-price").text.to_d 
    product.rating = item.css("span+ .a-text-normal").text.to_f 
    product.save! 
    end 
  • 獲取您的控制器從產品模型數據,並顯示在視圖
  • +0

    除非你確定它會返回可用數據,否則不要使用'item.css(「.s-access-title」).text'。通常它會連接所有找到的元素中的所有文本,從而產生無法解開或分割的運行字符串。 'css(...)。map(&:text)'通常是你想要做的。 –

    相關問題