如何将从 Nokogiri 抓取的数据保存到 Rails 数据库?
How do I save the scraped data from Nokogiri to a Rails database?
我想将抓取的数据保存到数据库中,以便在其上实现搜索和排序功能。
我尝试创建一个新的 Rake 任务并更新属性,但为此我需要在每次抓取数据时 运行 rake fetch-data
。
app/controller
def show
url = @scrapper.url
data = Nokogiri::HTML(open(url))
@doc= data.css(".s-item-container")
end
app/views/show
<% @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
没用。还有其他方法可以实现吗?
- 创建数据库
rake db:create
- 创建'Product'模型
rails g model Product title:string price:decimal rating:float
- 创建一个 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
- 从控制器中的 Product 模型获取数据并将其显示在视图中
我想将抓取的数据保存到数据库中,以便在其上实现搜索和排序功能。
我尝试创建一个新的 Rake 任务并更新属性,但为此我需要在每次抓取数据时 运行 rake fetch-data
。
app/controller
def show
url = @scrapper.url
data = Nokogiri::HTML(open(url))
@doc= data.css(".s-item-container")
end
app/views/show
<% @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
没用。还有其他方法可以实现吗?
- 创建数据库
rake db:create
- 创建'Product'模型
rails g model Product title:string price:decimal rating:float
- 创建一个 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
- 从控制器中的 Product 模型获取数据并将其显示在视图中