Nokogiri未定义方法'属性'nilClass

时间:2017-06-23 20:05:26

标签: ruby attributes nokogiri

这似乎是一个显而易见的问题,但我很新。我试图抓取Rotten Tomatoes top 100 movie列表以获得一个简单的CLI应用程序。一切顺利,直到hero.link行,我得到nilClass的未定义方法'属性'。我只是想获得标题链接的href的值。我已经尝试了我理解的所有内容,但我无法在不使用属性方法的情况下弄清楚如何访问我想要的内容。

但是,当我在函数中间使用pry时,我可以手动输入它,它似乎可以工作。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

为了将来建议这种调试循环的方法:

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