이 루비 스크립트를 작성하여 제조업체 웹 사이트에서 제품 정보를 긁어 냈습니다. 배열에서 제품 객체의 스크래핑과 저장이 작동하지만 배열 데이터를 csv 파일로 내보내는 방법을 알 수 없습니다. 이 오류는 다음과 같이 throw됩니다. scraper.rb : 45 : 정의되지 않은 메소드 send_data for main : Object (NoMethodError)루비 스크레이퍼. CSV로 내보내는 방법?
이 코드는 이해할 수 없습니다. 왜이 일을하고 있으며 왜 제대로 작동하지 않습니까?
send_data csv_data,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=products.csv"
전체 코드 :
@csv = FasterCSV.open('filename.csv', 'w')
을하고 진행하면서 다음에 쓰기 :
#!/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 데이터는'csv_data'에 있습니다. 너는 그걸로 무엇을하고 싶니? 파일에서 원한다면 파일을 열고 그것에 쓰십시오. –
@MarkReed : ['send_data'] (http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data) –
아, 물론 알았어 야 할 것은 ActionSomething 메소드입니다. 루비 (Ruby)의 양날 검인 레일즈 (Rails)에 감사드립니다. –