2011-05-05 71 views
1

我试图抓取用户输入的网址,然后用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

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

请注意,你必须尊重HTML页面的BASE标签(如果有)。 ..

+0

这很棒。谢谢! – 2011-05-06 01:17:25

2

,而无需下载的网页,并使用引入nokogiri的,我会建议使用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属性。机械化如何帮助构建绝对网站? – 2011-05-06 01:16:32

+0

新增了一个例子来打印此页面上方的所有网址 – 2011-05-06 02:10:54