2011-10-28 17 views
6

Estoy creando una pequeña aplicación para mí donde ejecuto un script de Ruby y guardo todas las imágenes de mi blog.Guarde todos los archivos de imagen de un sitio web

No puedo encontrar la forma de guardar los archivos de imagen después de identificarlos. Cualquier ayuda sería muy apreciada.

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

url = '[my blog url]' 
doc = Nokogiri::HTML(open(url)) 

doc.css("img").each do |item| 
    #something 
end 
+0

¿Esto está realmente relacionado con los rieles? –

Respuesta

25
URL = '[my blog url]' 

require 'nokogiri' # gem install nokogiri 
require 'open-uri' # already part of your ruby install 

Nokogiri::HTML(open(URL)).xpath("//img/@src").each do |src| 
    uri = URI.join(URL, src).to_s # make absolute uri 
    File.open(File.basename(uri),'wb'){ |f| f.write(open(uri).read) } 
end 

Utilizando el código para convertir a rutas absolutas desde aquí: How can I get the absolute URL when extracting links using Nokogiri?

+0

Aparece un error cuando uso esto. "error en la conversión de salida debido a un error de conv, bytes 0xFF 0xC3 0x98 0xC3" – Farhad

-1
system %x{ wget #{item['src']} } 

Editar: Esto es asumiendo que estás en un sistema UNIX con wget :) Edición 2: Actualización de código para agarrar el img src de nokogiri.

+0

Esto no maneja rutas de imagen relativas. – Phrogz

1

asumiendo el atributo src es una URL absoluta, tal vez algo como:

if item['src'] =~ /([^\/]+)$/ 
    File.open($1, 'wb') {|f| f.write(open(item['src']).read)} 
end 
+0

¿Qué significa/(^ \ /] +) $/mean? –

+0

@ZackShapiro Esa es una expresión regular que coincide con "uno o más caracteres que no son una barra diagonal, siempre que toquen el final de la cadena"; en este caso @pguardiario lo está usando para obtener el nombre de archivo para que '$ 1' se pueda usar para guardar un archivo con ese nombre. Es una forma geek de la parte 'File.basename (uri)' de mi respuesta. – Phrogz

1

Consejo: hay una sencilla forma de obtener imágenes de la cabeza/cuerpo de una página usando la gema Scrapifier. Lo bueno es que también puedes definir qué tipo de imagen quieres que se devuelva (jpg, png, gif).

darle una oportunidad: https://github.com/tiagopog/scrapifier

Esperamos que disfrute.

Cuestiones relacionadas