Очистка экрана, когда результаты не могут быть найдены?

У меня есть следующий код в задаче очистки экрана грабли

page = agent.get("https://domainname.co.uk/unit/27/logs?type=incoming&page=8")
page = agent.page.search("table tbody tr").each do |row|
  next if (!row.at('td'))
  time, source, destination, duration = row.search('td')[1..5].map{ |td| td.text.strip }
  parsed_time = Time.parse(time)
  unless Call.find_by_time(parsed_time)
    Call.create({:time => parsed_time, :source => source, :destination => destination, :duration => duration})
  end
end

Этот раздел скрипта переходит на страницу 8, а затем создает запись вызова для каждой строки данных таблицы.

Если страница, на которую я перешел, не содержит журналов вызовов, она показывает следующий код:

<tr class='no-data'>
 <td colspan='7'>There are no call records matching the search criteria</td>
</tr>

Когда задача rake переходит на страницу без журналов вызовов, задачи не завершаются. Он показывает следующую ошибку:

rake aborted!
can't convert nil into String

Итак, есть ли способ восстановиться после нуля при использовании Nokogiri и Mechanize? Есть ли простой способ проверить, существует ли <tr class='no-data'>, прежде чем пытаться импортировать данные?

Обновить с помощью предложенного кода

Сообщение об ошибке

Scraping Page 9
rake aborted!
can't convert nil into String

Код

puts 'Scraping Page 9'    
    if agent.page.root.css('tr.no-data').empty?
      page = agent.get("https://domaindname.co.uk/27/logs?type=incoming&page=9")
      page = agent.page.search("table tbody tr").each do |row|
        next if (!row.at('td'))
        time, source, destination, duration = row.search('td')[1..5].map{ |td| td.text.strip }
        parsed_time = Time.parse(time)
        unless Call.find_by_time(parsed_time)
          Call.create({:time => parsed_time, :source => source, :destination => destination, :duration => duration})
        end
      end
    else
      puts 'No calls on this page'
    end

person dannymcc    schedule 31.03.2012    source источник


Ответы (1)


Вы можете проверить, существует ли этот элемент

if agent.page.root.css('tr.no-data').empty?
   # it doesn't exist
else
   # do the normal thing
end
person John Douthat    schedule 31.03.2012
comment
Не бери в голову! Я помещал оператор if перед URL-адресом страницы. Спасибо! - person dannymcc; 01.04.2012