红宝石刮刀.如何导出为 CSV



我写这个红宝石脚本是为了从制造商网站上抓取产品信息。在数组中抓取和存储产品对象是有效的,但我无法弄清楚如何将数组数据导出到 csv 文件。引发此错误:scraper.rb:45:main:Object 的未定义方法 'send_data' (NoMethodError(

我不明白这段代码。这是在做什么,为什么它不能正常工作?

  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 =~ /#dddd/
            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" 

如果您不熟悉 Ruby,您应该使用 Ruby 1.9 或更高版本,在这种情况下,您可以使用内置的 CSV 输出,该输出内置快速 csv 和 l18n 支持:

require 'csv'
CSV.open('filename.csv', 'w') do |csv|
  csv << [sku, name, desc]
end

http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html

File.open('filename.csv', 'w') do |f|
  f.write(csv_data)
end

这样做可能更有意义:

@csv = FasterCSV.open('filename.csv', 'w')

然后边走边写:

@csv << [sku, name, desc]

这样,如果您的脚本在中途崩溃,您至少可以获得一半的数据。

相关内容

  • 没有找到相关文章

最新更新