有一个水豚脚本,其中包括下载绝对图像链接。
尝试将这些图像写入磁盘时,我收到错误:
File name too long
输出还包括数组中所有图像URL的长列表。我认为gsub
可以解决这个问题,但我不确定是哪一个或究竟如何实现它。
以下是一些示例图像网址,它们是链接数组的一部分。在这些示例中,合适的替代名称为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
答案 0 :(得分:1)
您可以使用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"
答案 1 :(得分:0)
创建文件名确实存在问题。
imagelink = info.all("//*[@rel='lightbox[rotation]']")
将返回一组节点。
从中您可以使用href
获取map
值并将结果数组保存在image
中。
然后尝试使用该数组作为文件名。