网页抓取与Nokogiri::HTML和Ruby -保存图像



我正在编写一个脚本来抓取数据&来自网店产品页面的图片(经船东同意)

我有一个工作脚本,该脚本循环遍历具有20042个产品url的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]))

看起来我需要弄清楚的是如何将url提供给保存图像的代码,但任何帮助都会非常感激!

您可以使用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/

相关内容

  • 没有找到相关文章

最新更新