2011-10-28 37 views
6

Tôi đang tạo một ứng dụng nhỏ cho bản thân mình, nơi tôi chạy tập lệnh Ruby và lưu tất cả hình ảnh ra khỏi blog của mình.Lưu tất cả các tập tin hình ảnh từ một trang web

Tôi không thể tìm ra cách lưu tệp hình ảnh sau khi tôi đã xác định chúng. Bất kì sự trợ giúp nào đều được đánh giá cao.

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

Điều này thực sự liên quan đến đường ray? –

Trả lời

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 

Sử dụng mã chuyển đổi sang đường dẫn tuyệt đối từ đây: How can I get the absolute URL when extracting links using Nokogiri?

+0

Tôi gặp lỗi khi sử dụng. "chuyển đổi đầu ra không thành công do lỗi chuyển đổi, byte 0xFF 0xC3 0x98 0xC3" – Farhad

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

Chỉnh sửa: Đây là giả sử bạn đang ở trên một hệ thống với wget :) Chỉnh sửa 2 unix: Cập nhật mã cho grabbing src img từ nokogiri.

+0

Điều này không xử lý đường dẫn hình ảnh tương đối. – Phrogz

1

giả các thuộc tính src là một địa chỉ tuyệt đối, có lẽ cái gì đó như:

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

/(^ \ /] +) $/có nghĩa là gì? –

+0

@ZackShapiro Đó là cụm từ thông dụng khớp với "một hoặc nhiều ký tự không phải là dấu gạch chéo, miễn là chúng chạm vào cuối chuỗi"; trong trường hợp này @pguardiario đang sử dụng nó để lấy tên tệp sao cho '$ 1' có thể được sử dụng để lưu một tệp có tên đó. Đó là một dạng geeky của phần 'File.basename (uri)' trong câu trả lời của tôi. – Phrogz

1

Mẹo: có sự đơn giản cách để lấy hình ảnh từ đầu/thân của trang bằng cách sử dụng đá quý Bộ lọc. Điều thú vị là bạn cũng có thể xác định loại hình ảnh nào bạn muốn quay lại (jpg, png, gif).

Hãy thử: https://github.com/tiagopog/scrapifier

Hy vọng bạn sẽ thích thú.

Các vấn đề liên quan