Найти таблицу в массиве с наибольшим количеством строк, используя Ruby, Nokogiri и Mechanize - PullRequest
1 голос
/ 23 ноября 2011
@p = mechanize.get(url)
tables = @p.search('table.someclass')

Я в основном перебираю около 200 страниц, помещая таблицы в массив, и единственный способ сортировки - это найти таблицу с наибольшим числом строк.иметь возможность просматривать каждый элемент в массиве и выбирать первый элемент с наибольшим количеством строк.

Я пытался использовать max_by, но это не сработает, потому что мне нужноискать таблицу, которая является элементом массива, чтобы найти tr.count.

1 Ответ

1 голос
/ 23 ноября 2011

Два способа:

biggest = tables.max_by{ |table| table.css('tr').length }
biggest = tables.max_by{ |table| table.xpath('.//tr').length }

Поскольку вы не указали пример URL, вот аналогичный поиск, показывающий, что можно использовать max_by:

require 'mechanize'
mechanize = Mechanize.new
rows = mechanize.get("http://phrogz.net/").search('table#infoporn tbody tr')

# Find the table row from the array that has the longest link URL in it
biggest = rows.max_by{ |tr| tr.at_xpath('.//a/@href').text.length }

p biggest.name, biggest.at('.//a/@href')
#=> "tr"
#=> [#<Nokogiri::XML::Attr:0x1681680 name="href" value="slow-file-reads-on-windows-ruby-1.9">]
...