SOFT
BLOG
&
Логин
Имя:
Пароль:

Парсер HTML. Обзор технологий

Постараюсь дать краткое описание некоторым методотам обработки HTML, XML документов. Основная задача таких технологии это извлечение, структурирование и преобразование информации в другое удобное представление. Это всё называют одним общим термином - Парсинг (англ. parsing). Подробнее Вы можете почитать про синтаксический анализ. Могут быть разные причины и цели чтобы извлекать информацию из документов, но обычно это делают для следующего использования.

В вэб-технолониях к парсингу информации прибегают для того, чтобы можно было повторно использовать эту информацию на сайтах. Создают клоны других сайтов, либо собирают информацию с других сайтов на своих - Агрегация. Конечно можно делать копипаст документов проще, но чаще информация с других сайтов имеет не тот вид который необходим и в ручную иногда бывает не возможно (особенно когда огромный объём информации). И возникает необходимость получить только саму информацию (текст), без лишних элементов оформления и разместить у себя на сайте с учетом своего оформления, дизайна сайта.

Процесс агрегации сводится к следующим этапам:

  • выбор и скачивание документа
  • анализ документа (структурирование, фильтрация и т.д.)
  • выделение текста из нужного фрагмента
  • использование, т.е. создание нового документа на своём сайте с найденым текстом.

Агрегацию осуществляют все кому не лень, ибо это информация при успешном использовании может принести немалый доход при скромных затратах, в этом смысл агрегации. Чаще все агрегаторы это сайты-"паразиты". Эти сайты "впитывают" чужую информацию (с нарушением авторских прав или без) для того, чтобы привлечь больше посетителей (трафик). И далее осуществляют монетизацию этого трафика (кто как хочет и умеет). На один нормальный сайт существует тысячи агрегаторов. Но есть и другие примеры где агрегация успешный и полезный продукт. Например, новостные ленты поисковых систем (Новости Гугла и Яндекса). Сами поисковики не создают новости, они лишь осуществляют сбор свежих новостей и выдают своим пользователям в виде анонса (начальный фрагмент новости). Если информация интересует пользователя, то он может перейти на сайт-источник и получить полный вариант. Агрегация суть технологии RSS, она позволяет сообщать другим сайтам какие-либо события в виде простых XML-документов. С помощью кода или модулей на сайт устанавливают поддержку RSS и например, уже другие сайты и программы могут оперативно получать новости.

Клоны сайтов, это полная или частичная копия сайта-"донора". Часто на них не устанавливается даже свой оригинальный дизайн, за то стоят свои рекламные блоки =)

XML-анализаторы

Для обработки xml-подобных документов (HTML основан на XML), используются анализаторы. Существует 2 вида анализаторов это SAX и DOM. Оба анализатора работают по-разному. SAX выполняет обработку по фрагментам, и делает это за один проход. Он позволяет обрабатывать большие документы. Но он не всегда гибкий. Второй, DOM-анализатор загружает весь документ в память, формирует дерево данных, по которому с помощью инструментов (XPath или jQuery) легко произвести навигацию, поиск, замену и т.д. Наиболее популярным является DOM-анализатор, его часто используют в JavaScript, C, Pascal, PHP, PERL и т.д.

Для расширенного анализа в XML были включены технологии XLink. XPath, Xpointer. XPath достаточно мощный язык для навигации внутри структуры документа. Не возможно дать на этой странице описание всем замечательностям, которые в нем реализованы. Скажу лишь то, что XPath безусловно лучший инструмент в DOM. Я думаю в любом ЯПе есть библиотека XPath.

Практически в любом языке программирования или операционной системе реализованы парсинг XML. В среде MS Windows это библиотека MSXML, которая реализует SAX\DOM механизмы, является компонентом этой ОС.

Еще крайне полезным инструментов в анализе документов является Regex, аббревиатура от regular expression. Он хорошо реализован на популярных ЯПах. Сам регекс не может является заменой XML-анализаторов, но он очень хорошо повышает возможности парсинга. Регекс вполне способен найти и заменить определенные фрагменты в тексте. Часто используется в простых парсерах. Например в email-парсерах и т.д.

Пора уже изучить XPath и Regex, если Вы еще не знаете

Не забуду указать про XQuery. Мощный поисковый инструмент, по сути это язык запросов. Позволяет произвести запросы в XML как это делают SQL в базу. Запросы при этом могут быть сложными, с большим кол-вом условий. Для работы XQuery необходим процессор (существующие процессоры). Из известных вижу Saxon. Тем кто заинтересовался этой технологией, то стоит обратить внимание на проект Zobra.

Libxml2

Это библиотека изначально создавалась в Линуксе для проекта GNOME. Сейчас широко используется в различных парсерах. Официальный сайт - http://www.xmlsoft.org. Проект изначально разрабатывается на Си, но уже портиван на большинство ЯП, в том числе и на Паскаль. Для подключения libxml2 к своему проекту используется откомпилированный код (либо компилируемый исходник). В среде Windows это динамическая библиотека libxml2.dll, в Линуксах libxml2.so. В среде Фрипаскаль проект реализован в библиотеке под названием xml2. Libxml2 это XSLT-процессор, в нем доступны XQuery, XPath. Он поддерживает HTML, есть встроенные функции для парсинга. Хорошо работает с различными кодировками и способна конвертировать документы в различные кодировки. Имеет множество функции для работы в архитектуре DOM и SAX. У него также удобная лицензия - MIT. На данный момент есть множество примеров на языке Си, мало примеров на паскале. Постараюсь привести несколько примеров работы с этой библиотекой.

Internet tools

Самая интересная на данный момент библиотека инструментов, которая мне больше всего нравится это Internet tools. В него включены простые сетевые функции и библиотеки, выполняет XPath 2 (почти полная поддержка) и Xquery, есть интересные штуки под названием simple html parser и html tree parser. Реализован продвинутый метод шаблонного поиска. И это всё для freepascal. С помощью этого инструмента создается текущий проект.

Для работы необходим Lazarus, библиотека. В библиотеку включена реализация Регекса (regexd).

Следующий документ в данном разделе более подробнее про Internet tools.