我正在编写一个脚本来从网上商店产品页面获取数据和图像 (经业主同意)
我有一个工作脚本,它循环遍历包含 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]))
看起来我需要弄清楚的是如何将网址提供给保存图像的代码,但任何帮助将不胜感激!
您可以使用 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/