【问题标题】:Using WWW:Mechanize to download a file to disk without loading it all in memory first使用 WWW:Mechanize 将文件下载到磁盘,而无需先将其全部加载到内存中
【发布时间】:2011-05-20 14:10:27
【问题描述】:

我正在使用 Mechanize 来帮助下载一些文件。目前我的脚本使用以下行来实际下载文件...

agent.get('http://example.com/foo').save_as 'a_file_name'

但是,这会将完整的文件下载到内存中,然后再将其转储到磁盘。你如何绕过这种行为,直接下载到磁盘?如果我需要使用 WWW:Mechanize 以外的东西,那么我将如何使用 WWW:Mechanize 的 cookie?

【问题讨论】:

  • 请注意Mechanize::File 类不适用于大文件。在这些情况下,应该改用Mechanize::Download 类,因为它将内容以小块的形式下载到磁盘。查看herehere 了解更多详情。

标签: ruby mechanize


【解决方案1】:

你看过Mechanize::FileSaver吗?看起来它可以满足您的需求。

这是一个保存遇到的所有 PDF 文件的示例:

require 'rubygems'
require 'mechanize'

agent = Mechanize.new
agent.pluggable_parser.pdf = Mechanize::FileSaver
agent.get('http://example.com/foo.pdf')

【讨论】:

    【解决方案2】:

    你真正想要的是 Mechanize::Download

    http://mechanize.rubyforge.org/Mechanize/Download.html

    你可以这样使用:

    require 'mechanize'
    
    agent = Mechanize.new
    agent.pluggable_parser.default = Mechanize::Download
    agent.get('http://example.com/foo').save('a_file_name')
    

    【讨论】:

    • 我要补充一点,我刚刚使用了您的解决方案,只是我使用了 Mechanize:FileSaver 而不是 Mechanize:Download。这没有奏效=>文件保存到磁盘但没有任何内容..0 kb。我刚刚用下载替换了它,整个都很完美:) 谢谢
    • 文件保存在哪里?
    • @carbonr 和 agent.get(url).save(File.join(dir, filename)) 文件将保存到您指定的目录中。
    • 您可以使用此代码将文件保存到 ~/Downloads 文件夹agent.get(download_url).save(File.join(Dir.home, 'Downloads', file_name))
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2012-05-13
    相关资源
    最近更新 更多