机械化HTTP未找到404链接

时间:2017-12-10 18:36:28

标签: ruby mechanize

我正在创建一个使用Mechanize的刮刀,它通过网址的csv运行并下载图像。

问题是某些图像不再存在,我抛出了未找到的404错误。我是Ruby的新手,我不知道如何使用异常,我希望有人可以帮助我。

我离开了我想要做的事情

agent = Mechanize.new

url = CSV.read("links.csv")

begin
    url.each do |url|
        puts url
        agent.get(url.first).save
    end
rescue Net::HTTPNotFound  => e
    puts e.response_code 
    agent = e.agent
end  

它给我的错误是:

/home/miguel/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/mechanize-2.7.5/lib/mechanize/http/agent.rb:323:in `fetch': 404 => Net::HTTPNotFound for http://www.rockauto.com/info/915/FCA6366_Fronp__ra_p.jpg -- unhandled response (Mechanize::ResponseCodeError)
    from descargaimagenes.rb:34:in `fetch_with_retry'
    from /home/miguel/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/mechanize-2.7.5/lib/mechanize.rb:464:in `get'
/home/miguel/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/mechanize-2.7.5/lib/mechanize/http/agent.rb:323:in `fetch': 404 => Net::HTTPNotFound for http://www.rockauto.com/info/915/FCA6366_Fronp__ra_p.jpg -- unhandled response (Mechanize::ResponseCodeError)
    from descargaimagenes.rb:34:in `fetch_with_retry'
    from /home/miguel/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/mechanize-2.7.5/lib/mechanize.rb:464:in `get'

1 个答案:

答案 0 :(得分:0)

您可以使用Mechanize::ResponseCodeError例外:

  

当Mechanize遇到响应代码时会引发此错误   不知道该如何处理。目前,如果发生此异常将被抛出   Mechanize遇到200,301或302以外的响应代码。任何   其他响应代码由用户自行处理。

要在每个区块内移动救援,这样您就可以转到网址,保存图像,如果找不到资源,请打印响应代码。

[
  'http://www.rockauto.com/Images/whatsnew1.jpg?1512928800',
  'http://www.rockauto.com/info/915/FCA6366_Fronp__ra_p.jpg',
  'http://www.rockauto.com/Images/whatsnew2.jpg?1512928800'
].each do |url|
  begin
    agent.get(url).save
  rescue Mechanize::ResponseCodeError => e
    puts e.response_code 
  end
end

有两个工作网址,中间的网址不起作用,你应该得到与每个工作网址对应的两个图像。