我正在编写一个脚本来抓取数据&来自网店产品页面的图片(经船东同意)
我有一个工作脚本,该脚本循环遍历具有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/