【问题标题】:Saving an HTML file with the URL as the filename in Ruby在 Ruby 中以 URL 作为文件名保存 HTML 文件
【发布时间】:2014-06-07 00:45:14
【问题描述】:

我目前正在寻找一种访问 URL、将数据保存为 .html 文件并根据 URL 命名文件的方法。目前,我有一个 .text 文件,每一行都是一个单独的 URL:

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

我当前的代码只是将每个 .html fi;e 保存为一个数字,但如果可能的话,我想使用 URL 本身的名称。

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 的选项?我不知道。 谢谢。

【问题讨论】:

    标签: html ruby parsing


    【解决方案1】:

    您可以使用 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 
    }
    

    【讨论】:

    • 感谢您的回复。 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': Is a directory - / (Errno::EISDIR)
    • 它似乎期待一个以 /index.html 结尾的 URL,而不仅仅是 /。您应该能够通过在以 / 结尾的 URL 的末尾附加 index.html(或任何适当的`)来解决此问题。
    • 嗯,我明白了。如果没有什么要附加的,有什么建议吗?这些 URL 只是使用 sony.com、apple.com 等内容的简单测试示例。实际上,我只是通过将 /index.html 添加到实际具有有效 URL 的 URL 之一(苹果)来尝试它,保存的文件是一个 index.html,所以不确定如何处理多个 URL,假设它们都有有效的 /index.html 页面。
    猜你喜欢
    • 2013-11-14
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    相关资源
    最近更新 更多