Как обрабатывать NIL с помощью скребка Anemone / Nokogiri?

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    

Написание скребка в Anemone, который использует Nokogiri под капотом..

Когда-нибудь селектор .details h2'ничего не возвращает, потому что его нет в HTML, а вызывает text на это бросает исключение.

Я хотел бы избежать, если / Elses повсеместно...

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

Есть ли какой-либо более красноречивый способ обработки ошибок, вызванных несоответствующей разметкой? Например, CoffeeScript имеет экзистенциальный оператор person.name?.first(), Если в HTML есть элемент, отлично создайте объект и вызовите на нем текст. Если нет, двигайтесь дальше и не добавляйте его в хеш.

1 ответ

Вам просто нужно сделать:

anemone.on_pages_like %[/events/detail/.*] do |page|   
      if not page.nil?
         ...#your code
      end
end
Другие вопросы по тегам