У меня есть следующий код в задаче очистки граблей
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 переходит на страницу без журналов вызовов, задача не может быть выполнена. Это показывает следующую ошибку:
* * 1010
Итак, есть ли способ использовать 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