У меня есть следующий код в задаче очистки экрана грабли
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