如何在ruby webcrawler中检查空页和HTTPErrors

如何在ruby webcrawler中检查空页和HTTPErrors,ruby,nokogiri,Ruby,Nokogiri,这段代码从谷歌图片中随机抓取一张图片。然而,当webcrawler试图搜索一个google没有显示结果的术语时,我会出错。当google给webcrawler一张不再存在的图片时,我也会出错。如何编写此代码,以便在遇到错误时重新运行并尝试获取另一个图像 require 'open-uri' require 'nokogiri' url = "https://www.google.com/search?hl=en&q=" + rand(0-999999).to_s + "&ion=

这段代码从谷歌图片中随机抓取一张图片。然而,当webcrawler试图搜索一个google没有显示结果的术语时,我会出错。当google给webcrawler一张不再存在的图片时,我也会出错。如何编写此代码,以便在遇到错误时重新运行并尝试获取另一个图像

require 'open-uri'
require 'nokogiri'
url = "https://www.google.com/search?hl=en&q=" + rand(0-999999).to_s + "&ion=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bvm=bv.42553238,d.dmg&biw=1354&bih=622&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=sNEfUf-fHvLx0wG7uoG4DQ"
googim = Nokogiri::HTML(open(url))
googimstr = googim.to_s
durl = googim.to_s.split('imgurl=')[1].split('&amp')[0]

name = durl.reverse.split("/")[0].reverse

open("./data/images/#{name}", 'wb') do |file|
          file << open(durl).read
end
需要“打开uri”
需要“nokogiri”
url=”https://www.google.com/search?hl=en&q=“+rand(0-999999)。to_s+”&ion=1&bav=on.2,或.r_gc.r_pw.r_cp.r_qf&bv.42553238,d.dmg&biw=1354&bih=622&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=snefufuff-fhx0wg7uog4dq”
googim=Nokogiri::HTML(打开(url))
googimstr=googim.to_
durl=googim.to_.split('imgurl=')[1]。split('&')[0]
name=durl.reverse.split(“/”[0]。reverse
打开(“./data/images/#{name},'wb')do|文件|

文件您可以将代码的适当部分包装在
begin/end
块中,并
rescue
异常。例如:

begin
  open("./data/images/#{name}", 'wb') do |file|
    file << open(durl).read
  end
rescue => e
  puts "some failure: #{e}"
end
开始
打开(“./data/images/#{name},'wb')do|文件|
文件e
放置“一些失败:#{e}”
结束

这里有一个指向Pickaxe/Programming Ruby的异常、捕获和抛出章节的链接:

*编辑,工作正常,我只是在开始后添加了整个代码,然后它捕获了所有错误。如果发现错误,我是否可以循环回到开始?检查
重试
wc.rb:6:in `split': invalid byte sequence in UTF-8 (ArgumentError)
    from wc.rb:6:in `<main>'
begin
  open("./data/images/#{name}", 'wb') do |file|
    file << open(durl).read
  end
rescue => e
  puts "some failure: #{e}"
end