Поскольку вы сказали в комментарии, что хотите сохранить логические отношения ячеек в одной строке:
@doc.css('div.c > table > tr').each do |tr|
td1, td2 = tr.xpath('./td') # Find only direct child items
# td1 is the first <td>, td2 the second
end
Если вы хотите эффективно извлечь весь текст сразу:
data = @doc.css('tr').map do |row|
# Find the text for all td, get the first two, then join with ' - '
row.xpath('./td').map(&:text)[0,2].join(' - ')
end
puts data
#=> a1 - b1
#=> a2 - b2
#=> a3 - b3
#=> a4 - b4
Приведенный выше вывод получен из немного более интересных тестовых данных, чем все "тесты".