尝试获取可能存在的HTML标记

时间:2015-06-27 15:36:07

标签: ruby-on-rails ruby exception-handling nokogiri

我正在使用Nokogiri解析一些HTML:

  doc = Nokogiri::HTML(open(url))
  doc.css('.blockGroup--posts .block')[2..30].each do |article|
    title = article.at('h2').text # or h3, h4
    image = article.at('.section-content img')['src']  # may not exist

问题是有时标题可能会显示在h2h4标记中,所以

title = article.at('h2').text

会报告

undefined method `text' for nil:NilClass

image也是如此。有时文章中没有图像,它也会报告错误。

如何让Nokogiri获得这些元素并继续运行?或者,如果这些元素不存在,我可以使用回调吗?

2 个答案:

答案 0 :(得分:1)

很简单,您可以像try一样:

title = article.at('h2').try(:text) || "your any alternative methods can be called here"

图像也可以相同。

try将返回nil或value,它将帮助您避免异常提升。

答案 1 :(得分:1)

你可以这样做:

title = article.at('h2,h3,h4').text