1

我正在编写一个脚本以从网上商店产品页面中获取数据和图像(经所有者批准)

我有一个工作脚本,它循环遍历具有 20042 个产品 URLS 的 CSV 文件,以获取存储在 CSV 文件中的所需数据。我需要做的最后一件事是保存产品图片。

我有这个代码(感谢这个线程中的 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]))

看起来我需要弄清楚的是如何将网址提供给保存图像的代码,但任何帮助将不胜感激!

4

1 回答 1

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    

这将为您提供的每个 url 写一个 200x200px 的图像(resize_to_fill 显然是可选的)。该库非常强大,有很多很多选项。如果你走这条路,我会推荐关于图像处理的 railscast:http ://railscasts.com/episodes/374-image-manipulation

如果您想获得更高级的文档,请查看文档:http ://rmagick.rubyforge.org/

于 2013-05-12T14:38:52.850 回答