2017-06-23 1 views
3

Das mag wie eine offensichtliche Frage scheinen, aber ich bin sehr neu. Ich versuche, Rotten Tomatoes top 100 movie Liste für eine einfache CLI-App zu kratzen. Alles geht gut bis zur Zeile hero.link, wo ich eine undefinierte Methode 'Attribut' für nilClass bekomme. Ich versuche nur, den Wert der href des Titellinks zu erhalten. Ich habe alles versucht, was ich verstehe und mehr, aber ich kann einfach nicht herausfinden, wie ich auf das zugreifen kann, was ich will, ohne die Attributmethode zu verwenden.Nokogiri undefined Methode 'Attribut' nilClass

Allerdings, wenn ich mitten in der Funktion mit hacken, kann ich es manuell eingeben, es scheint zu funktionieren.

def new_with_rank 
    self.get_top_page.css(".table tr").each do |e| 
    hero = Top100::Movie.new 
    hero.rank = e.css(".bold").text.delete!(".") 
    binding.pry 
    hero.rating = e.css(".tMeterScore").text.gsub!(/\u00A0/, "") 
    hero.title = e.css(".unstyled").text 
    hero.title.strip! #Don't know why I can't chain onto .text above 
    hero.reviews = e.css("td.right.hidden-xs").text 
    hero.link = e.css("td a").attribute("href").value 
    end 
    Top100::Movie.all.shift 
    Top100::Movie.all 
    binding.pry 
end 

Vielen Dank für Ihre Hilfe.

+1

dazu Ändern Sie bitte Ihre hebeln Linie, 'es sei denn, binding.pry e.css ("td a")'. Dann können Sie sehen, warum e.css ("td a") null ist. Sieht so aus, als ob nicht alle trs einen Anker haben. – Ucpuzz

+0

Vielen Dank! Dies führte mich zu dem Problem. Die Spaltentitel oben wurden über iteriert. Danke noch einmal! – TheDreamingTree145

Antwort

2

Für zukünftige vorschlagen solcher Ansatz für das Debuggen von Schleifen:

def new_with_rank 
    self.get_top_page.css(".table tr").each do |e| 
    begin 
     hero = Top100::Movie.new 
     hero.rank = e.css(".bold").text.delete!(".") 
     hero.rating = e.css(".tMeterScore").text.gsub!(/\u00A0/, "") 
     hero.title = e.css(".unstyled").text 
     hero.title.strip! #Don't know why I can't chain onto .text above 
     hero.reviews = e.css("td.right.hidden-xs").text 
     hero.link = e.css("td a").attribute("href").value 
    rescue => error 
     puts error 
     puts error.backtrace 
     binding.pry 
    end 
    end 
    Top100::Movie.all.shift 
    Top100::Movie.all 
end 
Verwandte Themen