2013-08-13 2 views
0
def scrape!(url) 
    Anemone.crawl(url) do |anemone| 
    anemone.on_pages_like %[/events/detail/.*] do |page| 
     show = { 
     headliner: page.doc.at_css('h1.summary').text, 
     openers: page.doc.at_css('.details h2').text 
     } 
     puts show 
    end 
    end 
end  

Écrire un grattoir à Anemone, qui utilise Nokogiri sous le capot ..Comment gérer les NIL avec le grattoir Anemone/Nokogiri?

Parfois, le sélecteur .details h2' rendement rien parce que son pas dans le code HTML, et appelant text sur elle déclenche une exception.

Je voudrais éviter si/elses dans tous les sens ...

if page.doc.at_css('.details h2').empty? 
     openers: page.doc.at_css('.details h2').text 
    end 

est-il un moyen plus éloquent des erreurs de manipulation produites par la marque inconsistant up? Par exemple, CoffeeScript a l'opérateur existant person.name?.first(). Si le code HTML contient l'élément, great crée l'objet et appelle le texte dessus. Sinon, continuez et ne l'ajoutez pas au hash.

+0

Que voulez-vous faire? Ignore les? –

+0

Tout comme avec tout autre code: vérifiez si une valeur est 'nil' et ne continuez pas (ou réagissez en conséquence). – user2864740

Répondre

0

Vous avez juste besoin faire:

anemone.on_pages_like %[/events/detail/.*] do |page| 
     if not page.nil? 
     ...#your code 
     end 
end