2013-08-16 10 views
8

Sto usando Nokogiri per raschiare le pagine web. Pochi URL devono essere indovinati e restituisce l'errore 404 non trovato quando non esistono. C'è un modo per catturare questa eccezione?Come gestire 404 errori non trovati in Nokogiri

http://yoursite/page/38475 #=> page number 38475 doesn't exist 

Ho provato quanto segue che non ha funzionato.

url = "http://yoursite/page/38475" 
doc = Nokogiri::HTML(open(url)) do 
    begin 
    rescue Exception => e 
     puts "Try again later" 
    end 
end 

risposta

18

Non funziona, perché non si è salvare parte di codice (è open(url) chiamata) che genera un errore in caso di ritrovamento di stato 404. Il seguente codice dovrebbe funzionare:

url = 'http://yoursite/page/38475' 
begin 
    file = open(url) 
    doc = Nokogiri::HTML(file) do 
    # handle doc 
    end 
rescue OpenURI::HTTPError => e 
    if e.message == '404 Not Found' 
    # handle 404 error 
    else 
    raise e 
    end 
end 

BTW, circa il salvataggio Exception:? Why is it a bad style to `rescue Exception => e` in Ruby?

+0

io cosa è meglio usare '' e.io.not_found – Calin

Problemi correlati