尝试图像抓取时出错

Error trying to image scrape

我正在尝试制作一个 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>'

但是如果我完全复制 link 并将其放入 Firefox,它会打开图像。这里发生了什么事?该程序确实将带有今天日期的图像文件写入程序目录,但该文件是空的。

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

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

只需将以下行放在程序的顶部,它应该可以正常工作:

require 'open-uri'

获取 art_link src(类似于 art_link.attributes['src'])。并且比 agent.get 来自源头。

之后您将只有 agent.page 处的图像。只需按 agent.page.save ('image_path_and_name').

保存即可