2016-11-12 38 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)'通常是你想要做的。 –

    相关问题