2015-02-07 4 views
0

Я пытаюсь разобрать this HTML table, представляя данные о температуре в течение года, предоставленные веб-сайтом правительства Австралии.Как вы анализируете таблицу HTML, представляющую время?

Эта таблица создана необычным способом: столбцы представляют собой месяцы, а строки - это дни месяца (поэтому ячейки первой строки - JAN 1, FEB 1, MAR 1). Каждая ячейка содержит номер, если есть данные, записанные на этот день, пустая ячейка, если данные не были записаны, или класс ячейки notDay, если день не существует (например, 31 февраля).

Моя цель заключается в создании базы данных, полную этих данных в формате

DATE   RAINFALL  MAX TEMP 
2015-02-07  35    31 
2015-02-07  40    17 

Мой вопрос: что будет самым простым и наиболее эффективным (с точки зрения эффективности программиста) способ синтаксического анализа таблицы, чтобы получить данные в удобный формат?

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

+0

Вы понимаете, что в верхней части страницы они предлагают zip-файл, который содержит те же самые данные в формате CSV, что было бы намного проще в обработке, нет? – CBroe

+0

@ CBroe Я этого не сделал, и теперь я чувствую себя очень глупо. Спасибо, что указали на это. Я все равно оставлю вопрос, потому что разработка того, как разбирать такие вещи, может быть полезной информацией, даже если здесь нет необходимости. – GreenTriangle

+0

D'oh! Я никогда не посещал исходную страницу. Урок, дети: прежде чем вы начнете очищать HTML, посмотрите, могут ли данные быть доступны в лучшем формате. – Satya

ответ

1

Интересно, если вы можете:

Возьмите все ячейки в порядке их появления:

  • Используйте Array#flatten, если у вас есть массив из массива ситуации.

Выбросьте все notDay клетки с Array#reject

перебрать все соответствующие даты, используя диапазон дат:

(Date.new(2014,1,1) .. Date.new(2014,12,31)).each {...} 

И идут оттуда ...?

+0

Умный и простой, я бы не подумал об этом! – GreenTriangle

Смежные вопросы