如何将从Nokogiri中删除的数据保存到Rails数据库?

时间:2016-11-12 13:21:22

标签: ruby-on-rails ruby nokogiri mechanize

我想将已删除的数据保存到数据库中,以便我可以在其上实现搜索和排序功能。

我尝试创建一个新的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

它没有用。还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:3)

  1. 创建数据库rake db:create
  2. 创建“产品”模型rails g model Product title:string price:decimal rating:float
  3. 创建rake任务。解析数据并将其保存在数据库中。
  4. 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
    
    1. 从控制器中的产品型号获取数据并在视图中显示