拥有一个下载绝对图像链接的水豚脚本。
当试图将这些图像写入磁盘时,我收到一个错误:
File name too long
输出还包括数组中所有图像URL的长列表。我认为gsub
可以解决这个问题,但我不确定是哪一个,也不确定如何实现它
以下是链接数组中的一些示例图像URL。在以下示例中,合适的替代名称为g0377p-xl-3-24c1.jpg
或g0371b-m-4-6896.jpg
:
http://www.example.com/media/catalog/product/cache/1/image/560x560/ced77cb19565515451b3578a3bc0ea5e/g/0/g0377p-xl-3-24c1.jpg
http://www.example.com/media/catalog/product/cache/1/image/560x560/ced77cb19565515451b3578a3bc0ea5e/g/0/g0371b-m-4-6896.jpg
这是代码:
require "capybara/dsl"
require "spreadsheet"
require 'fileutils'
require 'open-uri'
def initialize
@excel = Spreadsheet::Workbook.new
@work_list = @excel.create_worksheet
@row = 0
end
imagelink = info.all("//*[@rel='lightbox[rotation]']")
@work_list[@row, 6] = imagelink.map { |link| link['href'] }.join(', ')
image = imagelink.map { |link| link['href'] }
File.basename("#{image}", "w") do |f|
f.write(open(image).read)
end
您可以使用File.basename
只获取文件名:
uri = 'http://www.example.com/media/catalog/product/cache/1/image/560x560/ced77cb19565515451b3578a3bc0ea5e/g/0/g0377p-xl-3-24c1.jpg'
File.basename uri #=> "g0377p-xl-3-24c1.jpg"
文件名的创建确实存在问题。
imagelink = info.all("//*[@rel='lightbox[rotation]']")
将返回一个节点数组。
从中可以使用map
获得href
值,并将生成的数组保存在image
中。
然后尝试使用该数组作为文件名。