2011-05-05 9 views
1

私は、ユーザーが入力したWeb URLをスクレープし、HTMLで絶対パスを持つ有効な非破損イメージ要素の配列を出力しようとしています。私はNokogiriをスクレイピングに使用しています。ユーザが提供する予期せぬURLを簡単に処理するために使用できるものがあれば、最初から何かを書く方法を見つけ出すことができません。イメージパスを掻き集めた後にURLを作成する

例:

http://domain.com/ and /system/images/image.png 
=> http://domain.com/system/images/image.png 

http://sub.domain.com and images/common/image.png 
=> http://sub.domain.com/images/common/image.png 

http://domain.com/dir/ and images/image.png 
=> http://domain.com/dir/images/image.png 

http://domain.com/dir and /images/small/image.png 
=> http://domain.com/images/small/image.png 

http://domain.com and http://s3.amazon-aws.com/bucket/image.png 
=> http://s3.amazon-aws.com/bucket/image.png 

答えて

1

あなたが本当に(と言う、代わりにMechanizeを使用しての)それを自分で行いたい場合は、URI::joinを使用する:1がある場合は、HTMLページのBASEタグを尊重する必要が

require 'uri' 
URI::join("http://domain.com/dir", "/images/small/image.png") 
    # => http://domain.com/images/small/image.png 

注意。 ..

+0

これは気の利いたものです。ありがとう! –

2

代わりにページをダウンロードし、鋸山を使用しての、私はMechanizeを使用することをお勧めします。 Nokogiriの上に構築されているので、NokogiriでできることはすべてMechanizeで行うことができますが、スクレイピング/ナビゲートには多くの便利な機能が追加されています。上で説明した相対URLの問題を処理します。

require 'rubygems' 
require 'mechanize' 
url='http://stackoverflow.com/questions/5903218/construct-urls-after-scraping-for-image-paths/5903417' 
Mechanize.new.get(url) {|page| puts page.image_urls.join "\n"} 
+0

ドキュメントに情報が見つかりませんでした。要素の属性にアクセスするにはどうすればよいですか?例えばイメージのsrc属性そして、どのように正確に絶対URLを構築するのに役立ちますか? –

+0

このページのすべてのURLを上に印刷する例を追加しました –

関連する問題