2014-06-07 35 views
1

我目前正在寻找一种方法来访问一个URL,将数据保存为一个.html文件,并根据URL命名该文件。目前,我有每行作为一个单独的URL .text的文件:用URL保存一个HTML文件作为文件名到Ruby

http://www.url.com 
http://www.url1.com 
... 

我当前的代码是简单地保存每个html的网络连接; e为数字,但我想用的名字如果可能,网址本身。

require 'open-uri' 

n = 0 

open ("urllist.txt"){|o| 
    while url = o.gets 
     url.chomp! 
     printf("URL: %s", url) 
     open(url) {|site| 
      fname = sprintf("html/%d.html", n) 
      open(fname, "w"){|out| 
       d=site.read 
       out.write(d) 
      } 
     } 
     n += 1 
    end 
} 

也许一个选项使用IO.readlines?我不确定。 谢谢。

回答

0

您可以使用URI.parse(url).path获取给定完整URL的文件的路径,然后使用File.basename(path)来获取文件本身的名称。

require 'open-uri' 
require 'uri' 

n = 0 

open ("urllist.txt"){|o| 
    while url = o.gets 
     url.chomp! 
     printf("URL: %s", url) 
     open(url) {|site| 
      path = URI.parse(url).path 
      fname = "html/#{File.basename(path)}" 
      open(fname, "w"){|out| 
       d=site.read 
       out.write(d) 
      } 
     } 
     n += 1 
    end 
} 
+0

感谢您的回复。 URI.parse(url)的URL文本文件是否有特定的标准?目前它似乎检查了第一个URL,但是却出现错误:'/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/open-uri.rb:36 :in'initialize':是一个目录 - /(Errno :: EISDIR)' – tsukugiri

+0

它似乎期待一个以'/ index.html'结尾的URL,而不仅仅是'/'。你应该可以通过追加'index.html'(或其他合适的)到以/结尾的URL末尾来解决这个问题。 –

+0

嗯,我明白了,如果没有什么要追加的话,你可以提供任何建议吗?URL只是测试的例子使用像http://www.sony.com,apple.com等东西。实际上,我只是通过将/index.html添加到其中一个实际上有效的URL(苹果)并保存的文件是一个index.html,所以不知道它将如何处理多个URL,假设它们都有有效的/index.html页面。 – tsukugiri