Написание HTML-парсера на Erlang - PullRequest
9 голосов
/ 24 июня 2010

Я очень плохо знаком с Erlang, и в рамках моего учебного процесса я хотел бы написать HTML-анализатор на Erlang.

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

Кто-нибудь может дать мне совет на высоком уровне относительно того, как они будут подходить к этой проблеме в Эрланге?

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

Ответы [ 2 ]

6 голосов
/ 24 июня 2010

Я бы посоветовал вам взглянуть на ту, что включена в Mochiweb:

http://github.com/mochi/mochiweb/blob/master/src/mochiweb_html.erl

Функция parse/1, вероятно, является точкой входа, в которую вы заинтересованы.

4 голосов
/ 25 июня 2010

Это большая работа, если вы планируете завершить ее.Лучше всего использовать тот, который предлагает Роберто, но если вы полны решимости написать свой собственный проект для знакомства с Эрлангом, вот несколько советов ...

Вы должны сначала решить, собираетесь ли вызакодируйте ваш парсер вручную или используйте leex и yecc для генерации вашего парсера из грамматики.Ручное кодирование может быть лучше, если вы хотите научиться писать идиоматический Erlang.Написание парсера - отличный способ познакомиться с Эрлангом;Функциональные языки программирования превосходны в реализации синтаксических анализаторов.

Во-вторых, вы должны решить, хотите ли вы сгенерировать DOM-подобную структуру или сделать SAX-подобную модель обратного вызова, известную как поведение в Erlang.Если вы сделаете последнее, вы можете просто реализовать поведение для создания DOM.

Если вы посмотрите на поведение, вам также может понадобиться параметризованные модули .Это экспериментальная функция, которая может дополнять поведение, позволяя сохранять неизменное состояние в «экземпляре модуля».Не известно, будет ли эта новая функция поддерживаться сообществом или нет.(Для некоторых это выглядит слишком ОО).

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

Также из xmerl вы можете увидеть, как эта библиотека создает DOM с использованием кортежей Erlang.Возможно, вы захотите сделать что-то подобное.

...