我正在尝试制作一个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,它会打开图像。这里发生了什么事?该程序使用今天的日期将图像文件写入程序的目录,但该文件为空。
答案 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;)。