Что понадобится?

Спешу успокоить. Написание парсеров не требует монументальных знаний о используемом языке программированиябудь то PHP, Ruby или Python. Также необязательно иметь академические сведения о сопутствующих технологиях. Однако, кое-что придётся выучить хотя бы на «хорошо» . Перечислим веб-технологии, которые придётся знать каждому, кого интересует профессиональное создание синтаксических анализаторов:
Что понадобится всем
- Чтобы набросать первичный алгоритм работы будущего парсера, придётся проанализировать исходный код страниц сайта-донора. Само собой, без знаний (хотя бы на среднем уровне) HTML, CSS и Java Script никак не обойтись.
- Для более глубокого погружения в тему рекомендуется к изучению технология DOM, позволяющая с максимальным эффектом работать с иерархическим деревом веб-документа.
- На самом важном и сложном этапе – написании анализатора – потребуется знания какого-либо из инструментов текстовой обработки. «Продвинутые» кодеры, возможно, для поиска нужных кусков текста воспользуются регулярными выражениями. Безусловно, «регулярки» пользуются заслуженной славой как мощного средства для решения многх нетривиальных задач.
Однако сей способ не является самым лучшим, а зачастую и нежелательным. Во-первых, всё-таки, регулярные выражения не под силу многим джедаям от программирования. Уж очень специфичным мышлением нужно обладать, чтобы чувствовать себя в этой теме как рыба в воде. Во-вторых, html-код на большинтсве сайтов невалиден, а часто и некорректен. Даже отъявленные спецы могут запутаться в метасимволах и квантификаторах, пытаясь предусмотреть все случаи жизни.
Поэтому, оптимальным выходом будет не изобретение колеса, а использование готовых библиотек для парсинга, чуть ниже указаны самые популярные решения для каждого из языков.
Впрочем, это вовсе не означает что регулярные выражения можно и вовсе не изучать. Зачастую именно с помощью них удобно решать многие проблемы, перед которыми пасуют всесторонне разработанные библиотеки для парсинга. - Для эфективной работы с иерархичными структурами данных – желательно владеть парадигмой объектно-ориентированного программирования. Семантическое дерево можно строить и с помощью многомерных ассоциативных массивов, но, этот способ понравится только мазохистам :) ООП отлично поддерживается всеми языками рассматриваемыми на страницах этого сайта.
- Финальная обработка результатов предполагает сохранение данных в структурированном виде. Обычно на выходе нужна база данных. Так что понадобятся крепкие знания SQL, и, как минимум, MySql и PostgreSQL.
- Не обойтись без уверенного владения функциями для работы с файлами. Вполне возможно, данные придётся дописывать в CSV-файлы или конвертировать в электронные таблицы.
- Сведения о XML и XPath могут понадобиться как на этапе синтаксического анализа (иногда приходится парсить не сайты, а RSS-потоки), так и на стадии конечного сохранения результатов (то есть, на основе сторонних сайтов иногда необходимо создать всё ту же ленту RSS).
- Иногда спарсеные данные заливаются в новую базу данных посредством JSON. Данную javascript-технологию тоже необходимо освоить, благо ничего сложного она из себя не представляет.

Что понадобится «пэхапэшникам»
- Для получения исходного кода html-страниц понадобится уверенное знание библиотеки cURL. Это компактный набор мощных функций, предназначенных для работы с серверами по различным протоколам. . Кроме этого, нелишним будет знание стандартной php-функции file_get_contents, позволяющей легко получать текстовое содержимое удалённых файлов.
- Из специализированных библиотек на данный момент наибольшее распространение получили PHP Simple HTML DOM Parser, PHPQuery, Zend_DOM_Query, Nokogiri.

Что понадобится «рубистам»
Из эффективных ruby-библиотек отдельного внимания заслуживает Nokogiri, с обширным набором функций, которые могут понадобиться при написания самого сложного парсера. Для решения специфических задач подойдёт Watir, позволяющий получать данные, обновляемые через Ajax-запросы.

Что понадобится «питонщикам»
Парсинг на Pyton'е традиционно ассоциируется с библиотекой lxml. Впрочем она не лишена недостатков – достаточно упомянуть и проблемы с российскими кодировками и отсутствие документации на «великом и могучем». Альтернативным решением является Grab, представляющая из себя даже не библиотеку, а удобный специализированный фреймворк.
См. также: