Как я могу извлечь данные из типичного html-графика дня / времени? - PullRequest
0 голосов
/ 23 сентября 2008

Я пытаюсь написать синтаксический анализатор, чтобы получить данные из типичного html-таблицы на день / время (как this )

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

{:event => "Music With Paul Ray", :times => [T 12:00am - 3:00am, F 12:00am - 3:00am]}, etc. 

Я как-то понял полуисполненный грязный подход с использованием ruby, и мне интересно, как вы можете решить такую ​​проблему?

Ответы [ 4 ]

2 голосов
/ 23 сентября 2008

Лучшее, что можно сделать здесь, - это использовать анализатор HTML. С помощью HTML-анализатора вы можете программно просматривать строки таблицы, не прибегая к хрупким регулярным выражениям и не разбираясь самостоятельно.

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

for row in table:
    i = 0
    for cell in row: # skipping row 1
        event = name
        starttime = row[0]
        endtime = table[ i + cell.rowspan + 1 ][0]

        print event, starttime, endtime
    i += 1
0 голосов
/ 26 сентября 2008

Как уже говорилось, использование регулярных выражений в HTML, как правило, плохая идея, вы должны использовать хороший синтаксический анализатор.
Для проверки страниц XHTML вы можете использовать простой анализатор XML, который доступен на большинстве языков. Увы, в вашем случае данная страница не проверяется (служба проверки разметки W3C сообщает о 230 ошибках, 7 предупреждениях!)
Для общего, возможно, искаженного HTML, есть библиотеки, которые справляются с этим (kigurai рекомендует BeautifulSoup для Python, я знаю также TagSoup для Java, есть другие).

0 голосов
/ 23 сентября 2008

Используйте http://www.crummy.com/software/BeautifulSoup/, и эта задача должна быть легкой.

0 голосов
/ 23 сентября 2008

Вот что нужно будет сделать программе:

  1. Считать теги (определить атрибуты и открыть / закрыть теги)
  2. Построить внутреннее представление таблицы (как вы будете обрабатывать деформированные таблицы?)
  3. Рассчитать день, время начала и время окончания каждого события
  4. Объединить повторяющиеся события в серию событий

Это много компонентов! Возможно, вам придется задать более конкретный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...