尝试图像刮伤时出错

时间:2015-02-14 22:27:18

标签: ruby download mechanize

我正在尝试制作一个ruby程序,它会自动下载最新的Penny-Arcade。这是我的代码:

require 'mechanize'

agent = Mechanize.new
date_string = Date.today.to_s

page = agent.get('http://www.penny-arcade.com/comic/')
puts page

art_link = page.at('div#comicFrame > a > img')['src']

     File.open(date_string, 'wb') do |fo|
     fo.write open(art_link).read
     end

我从运行程序得到的输出是:

$ ruby grab_PA.rb
#<Mechanize::Page:0x007f38bc743af0>
grab_PA.rb:12:in `initialize': No such file or directory @ rb_sysopen - http://art.penny-arcade.com/photos/i-QpzhbpN/0/1050x10000/i-QpzhbpN-1050x10000.jpg (Errno::ENOENT)
        from grab_PA.rb:12:in `open'
        from grab_PA.rb:12:in `block in <main>'
        from grab_PA.rb:11:in `open'
        from grab_PA.rb:11:in `<main>'

但如果我复制那个确切的链接并将其放入Firefox,它会打开图像。这里发生了什么事?该程序使用今天的日期将图像文件写入程序的目录,但该文件为空。

2 个答案:

答案 0 :(得分:0)

open采用的是一个文件名,而不是一个URL。如果要访问URL,通常需要做的不仅仅是打开文件。

幸运的是,Ruby为Net::HTTP提供了一个很好的wrapper,称为open-uri

只需将以下行放在程序顶部即可正常工作:

require 'open-uri'

答案 1 :(得分:0)

获取art_link src(类似于art_link.attributes [&#39; src&#39;])。而且来自来源的agent.get。

您在agent.page上只有图片后。只需将其保存为agent.page.save(&#39; image_path_and_name&#39;)。