2013-03-31 63 views
1

我工作的一個腳本來獲取數據,從網上商店productpages &圖像0​​(由業主批准)網絡與引入nokogiri :: HTML和Ruby刮痧 - 保存圖像

我有一個工作的腳本,通過循環一個帶有20042產品URL的CSV文件,可以將我需要的數據存儲在CSV文件中。我需要的最後一件事是保存產品圖像。

我有這樣的代碼(在此thread感謝Phrogz)

URL = 'http://www.sample.com/page.html' 

    require 'rubygems' 
    require 'nokogiri' 
    require 'open-uri' 
    require 'uri' 

    def make_absolute(href, root) 
     URI.parse(root).merge(URI.parse(href)).to_s 
    end 

    Nokogiri::HTML(open(URL)).xpath('//*[@id="zoom"]/@href').each do |src| 
     uri = make_absolute(src,URL) 
     File.open(File.basename(uri),'wb'){ |f| f.write(open(uri).read) } 
    end 

運行偉大的一個單獨的URL,但我努力把它從通過CSV文件中的URL進行工作和我的圈啓動這樣的主腳本:

# encoding: utf-8 
    require 'nokogiri' 
    require 'open-uri' 
    require 'csv' 
    require 'mechanize' 

    @prices = Array.new 
    @title = Array.new 
    @description = Array.new 
    @warranty = Array.new 
    @leadtime = Array.new 
    @urls = Array.new 
    @categories = Array.new 
    @subcategories = Array.new 
    @subsubcategories = Array.new 

    urls = CSV.read("lotofurls.csv") 
    (0..urls.length - 1).each do |index| 

     puts urls[index][0] 
     doc = Nokogiri::HTML(open(urls[index][0])) 

貌似我只需要搞清楚的是如何將網址喂到代碼保存圖像,但任何幫助,將不勝感激!

回答

1

可以使這種快速工作的東西,如RMagick(或ImageMagick的,MiniMagick等)

對於RMagick,你可以做這樣的事情

require 'rmagick' 

images.each do |image| 
    url = image.url # should be a string 
    Magick::Image.read(url).first.resize_to_fill(200,200).write(image.desired_filename) 
end  

那會寫一個200x200px圖像您提供的每個網址(顯然,resize_to_fill是可選的)。圖書館非常強大,有許多選擇。如果你走這條路,我建議你在圖像處理的railscast:http://railscasts.com/episodes/374-image-manipulation

和文檔,如果你想獲得更先進:http://rmagick.rubyforge.org/