【发布时间】:2012-05-21 02:59:19
【问题描述】:
我编写了这个 ruby 脚本来从制造商网站上抓取产品信息。产品对象在数组中的抓取和存储工作,但我不知道如何将数组数据导出到 csv 文件。抛出此错误: scraper.rb:45: main:Object (NoMethodError) 的未定义方法“send_data”
我不明白这段代码。这是在做什么,为什么不能正常工作?
send_data csv_data,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=products.csv"
完整代码:
#!/usr/bin/ruby
require 'rubygems'
require 'anemone'
require 'fastercsv'
productsArray = Array.new
class Product
attr_accessor :name, :sku, :desc
end
# Scraper Code
Anemone.crawl("http://retail.pelicanbayltd.com/") do |anemone|
anemone.on_every_page do |page|
currentPage = Product.new
#Product info parsing
currentPage.name = page.doc.css(".page_headers").text
currentPage.sku = page.doc.css("tr:nth-child(2) strong").text
currentPage.desc = page.doc.css("tr:nth-child(4) .item").text
if currentPage.sku =~ /#\d\d\d\d/
currentPage.sku = currentPage.sku[1..-1]
productsArray.push(currentPage)
end
end
end
# CSV Export Code
products = productsArray.find(:all)
csv_data = FasterCSV.generate do |csv|
# header row
csv << ["sku", "name", "desc"]
# data rows
productsArray.each do |product|
csv << [product.sku, product.name, product.desc]
end
end
send_data csv_data,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=products.csv"
【问题讨论】:
-
您在哪里看到对
send_data方法的任何引用?为什么你认为这会奏效?看起来它来自发送电子邮件的东西?csv_data中有您的 CSV 数据;你想用它做什么?如果你想要它在一个文件中,打开一个文件并写入它。 -
@MarkReed:
send_data -
啊,我当然应该知道 - ActionSomething 方法。谢谢你,Rails,Ruby 的双刃剑。
-
@MarkReed:我会是最后一个对 Rails 文档说任何好话的人,但api.rubyonrails.org顶部有一个搜索框
-
@muistooshort:一旦我知道我正在使用 Rails,就不会抱怨如何在 Rails 中做事。我喜欢Rails。这把剑的对立面是大量新手误以为 Rails == Ruby,并试图在他们的框架之外使用所有这些有用的方法。
标签: ruby fastercsv scraper anemone