我正在创建一个使用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'
答案 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
有两个工作网址,中间的网址不起作用,你应该得到与每个工作网址对应的两个图像。