Использование .map создает несколько массивов без разделителя в Ruby - PullRequest
0 голосов
/ 26 апреля 2019

Я использую Nokogiri для извлечения данных из таблицы HTML в документ HTML.

document = Nokogiri::HTML(File.open("webpage.html"))
tables = document.search('table')
table = tables.first # first table in the document

document.at('table').search('tr').each do |row|
    cells = row.search('th, td').map { |cell| cell.text.strip }.values_at(0, 2) #select first and second column value
end

Когда я отображаю извлеченный текст, он создает много массивов без разделителя (вывод из печати):

["1972", "$5,500.00"]["1973", "$5,600.00"]["1974", "$6,600.00"]["1975", "$7,400.00"]["1976", "$8,300.00"]["1977", "$9,300.00"]["1978", "$10,400.00"]

Моя цель состоит в том, чтобы иметь один хэш, который выглядит следующим образом:

{"1972" => "$5,500.00", "1973" => "$5,600.00", "1974" => "$6,600.00", "1975" => "$7,400.00", "1976" => "$8,300.00", "1977" => "$9,300.00", "1978" => "$10,400.00"}

Если бы я создавал вложенный массив с помощью итератора карты, я мог бы справиться с этим, новсе, что я делаю, создает несколько массивов без разделителя (запятая).

Я даже не знаю, как назвать вывод, который я получаю, когда я:

print cells

В качестве альтернативы, какя могу преобразовать эти несколько массивов без разделителя в желаемый хэш-формат?

1 Ответ

2 голосов
/ 26 апреля 2019

Вы на самом деле не отображаете результаты, вы повторяете и отбрасываете их. Возможно, вы имеете в виду:

data = document.at('table').search('tr').map do |row|
  row.search('th, td').map { |cell| cell.text.strip }.values_at(0, 2).to_h
end

Что вернет один хеш на строку в массиве.

...