2013-03-31 61 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/