2013-03-28 2 views
1

이 코드는 Google 이미지에서 임의로 이미지를 가져옵니다. 그러나 웹 크롤러가 Google에서 결과를 표시하지 않는 용어를 검색하려고하면 오류가 발생합니다. Google이 더 이상 존재하지 않는 이미지의 웹 크롤러를 제공하면 오류가 발생합니다. 어떻게하면이 코드를 작성하여 오류가 발생하면 다시 실행하여 다른 이미지를 가져올 수 있습니다.ruby ​​webcrawler에서 빈 페이지와 HTTPErrors를 확인하는 방법

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 

여기 오류의 두 가지 유형이 내가받을 수 있습니다

첫 번째 오류 :

usr/lib/ruby/2.0.0/open-uri.rb:353:in `open_http': 400 Bad Request (OpenURI::HTTPError) 
    from /usr/lib/ruby/2.0.0/open-uri.rb:708:in `buffer_open' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:210:in `block in open_loop' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:208:in `catch' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:208:in `open_loop' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:149:in `open_uri' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:688:in `open' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:34:in `open' 
    from wc.rb:11:in `block in <main>' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:36:in `open' 
    from /usr/lib/ruby/2.0.0/open-uri.rb:36:in `open' 
    from wc.rb:10:in `<main>' 

두 번째 오류 :

wc.rb:6:in `split': invalid byte sequence in UTF-8 (ArgumentError) 
    from wc.rb:6:in `<main>' 

답변

2

당신은 코드의 해당 부분을 포장 할 수 begin/end 블록에 있고 rescue 예외입니다. 예를 들어, 난 그냥 다음 시작 후 내 전체 코드를 미세 추가 작품, http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_exceptions.html

+0

* 편집 : 여기

begin open("./data/images/#{name}", 'wb') do |file| file << open(durl).read end rescue => e puts "some failure: #{e}" end 

는 예외, 캐치에 대한 링크, 그리고 곡괭이/프로그래밍 루비의 장을 던져 그것은 모든 오류를 잡는다. 오류가 발견되면 시작으로 되돌릴 수 있습니까? –

+0

'재 시도'를 확인하십시오. http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-retry – orde

+0

완벽하게 작동합니다. 정말 고마워요. –

관련 문제