2011-10-28 9 views
6

私はRubyスクリプトを実行して自分のブログからすべての画像を保存する小さなアプリを作成しています。ウェブサイトからすべての画像ファイルを保存する

イメージファイルを特定した後にイメージファイルを保存する方法がわかりません。どんな助けでも大歓迎です。

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

これは本当にレールに関連していますか? –

答えて

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 

ここから絶対パスに変換するコードを使用する::How can I get the absolute URL when extracting links using Nokogiri?

+0

これを使用するとエラーが発生します。 "コンバイルエラー、バイト0xFF 0xC3 0x98 0xC3"のために出力変換に失敗しました " – Farhad

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

編集:鋸山からのimg srcをつかむために更新されたコード:これは、あなたがwgetの:) 編集2とUNIXシステムにしていると仮定しています。

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

これは、相対イメージパスを処理しません。 – Phrogz

1

Scrapifierの宝石を使ってページの頭や身体から画像を取得する方法。クールなのは、返すイメージのタイプ(jpg、png、gif)を定義することもできるということです。

はそれを試してみる:https://github.com/tiagopog/scrapifier

はあなたがお楽しみください。

+0

/(^ \ /] +)$/meanとは何ですか? –

+0

@ZackShapiroこれは、 "スラッシュではなく、文字列の最後に触れる限り、1つ以上の文字と一致する正規表現です。この場合、@ pguardiarioはそれを使ってファイル名を取得します。そのため、 '$ 1'を使ってその名前のファイルを保存することができます。これは私の答えの 'File.basename(uri)'部分の奇妙な形です。 – Phrogz

1

ヒント:シンプルがあるのか​​もしれないようなものは、src属性は絶対URLであると仮定し