Поиск по блогу

среда, 18 марта 2009 г.

Опыт разработки "универсальных" парсеров

Универсальных парсеров не бывает. На этом можно было бы и закончить статью с таким пафосным названием. :) Но я не закончу, а немного разовью тему на близком мне примере — примере написания парсера форумов.

Весь проект по парсингу и наполнению форумов я разбила на две программы. Первая парсит форумы и предназначена для работы с базой данных.

forum parser
(На скрине - англоязычный форум, дабы не светиться :) Хорошо бы к этому делу прикрутить переводчик и синонимайзер :)) )

Вторая — осуществляет постинг. Постинг проходит без обращения к базе, только с использованием данных, в определенной форме сохраненных первой программой. Я уже, вроде, упоминала, что импорт данных в определенном формате пригодится мне потом, когда я буду писать серверный скрипт для постинга (я для себя решила, что изучу, наконец, возможности PHP в этой области. Правда, пока не известно, когда дойдут руки).

Итак, перед созданием программы я села и подумала, как бы мне все так универсально сделать, чтобы прога без проблем смогла отпарсить любой форум. Недолгие размышления привели к пониманию того, что задуманный перфектум не реализовать. Да, такое часто бывает :) Далее в ход идет принцип "разделяй и властвуй". Я проанализировала 3 распространенных форумных движка и один самописный форум. И отделила универсальное от частного. К универсальному отнесла то, что можно единообразно получить со всех форумов с использованием регулярных выражений (названия и ссылки разделов, заголовки и ссылки тем и "технические" переменные, необходимые для парсинга (ссылки для постраничного перелистывания тем и сообщений)). К частному отнесла разбор сообщений. Для каждого движка он получился свой. Таким образом сообщения лучше всего очистить от всякого мусора.

В таблицу, в которой у меня хранились данные о форумах, добавила поле, в котором указываю тип движка. Все "универсальные" регулярки для каждого форума оставила в таблице, чтобы можно было их в индивидуальном порядке редактировать. При введении в базу нового форума, чтобы не вводить эти базовые регулярки, предусмотрела функцию удобного копирования всех параметров сходного по движку форума. Это гораздо удобнее и практичнее, чем вводить данные вручную.

При "распарсивании" сообщений пришлось еще учесть формат вывода даты создания сообщений и написать несколько функций для приведения даты в нужный вид. Тип формата даты тоже внесла в базу для каждого форума. Такие дела.
___

В последнее время редко получается писать в блог. Отчасти из-за того, что много работы (свой проект + фриланс). Но заметила, что количество подписчиков увеличивается. Это очень приятно, привет всем ;) Когда задумывала блог, планировала писать посты на темы последовательно, ориентируясь на новичков. После написания ряда таких статей я перешла к рассказам, что можно сделать, обладая базовыми знаниями. А сейчас вот думаю: пусть изложение будет немного непоследовательным, но я время от времени буду возвращаться к некоторым моментам, которые для меня ясны и понятны, а для начинающих могут оказаться полезными. Тем более, что с гугля много переходов именно по запросам, связанным с кодом. В общем, достаточно узкая тематика блога не помешает его периодическому пополнению новыми материалами.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Статьи схожей тематики:



Комментариев нет:

Отправить комментарий

Комментарии модерируются, вопросы не по теме удаляются, троллинг тоже.

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

Поделиться