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('&')[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>'
* 편집 : 여기
는 예외, 캐치에 대한 링크, 그리고 곡괭이/프로그래밍 루비의 장을 던져 그것은 모든 오류를 잡는다. 오류가 발견되면 시작으로 되돌릴 수 있습니까? –'재 시도'를 확인하십시오. http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-retry – orde
완벽하게 작동합니다. 정말 고마워요. –