Парсинг контента сайтов

Согласно ‘Вики’, парсинг — это нечто настолько непонятное объяснённое для обычного пользователя, что даже нет никакого смысла читать определение. Но среди интернет-пользователей есть уже довольно устоявшееся понятие данного слова, его-то и возьмём за основное.

 

Итак, парсинг — процесс получения каких-либо данных (например, страниц сайта, RSS ленты, XML содержимого и т. д.) с целью извлечения из них необходимой информации. Понятие может применяться как в более широком смысле — парсинг сайтов (добыча статей с заголовками и тегами из какого-либо блога для последующей публикации на своём ресурсе. Часто такое действие называют ‘граббинг’, а скрипты для их извлечения — ‘грабберы’), так и для чего-то незначительного (скажем, чтобы узнать Google PageRank сайта).

 

С термином определились, теперь возникает вполне закономерный вопрос — зачем это вообще нужно? На самом деле, применений этому может быть очень много: от вполне безобидного получения всех внешних ссылок на своём сайте до создания каталогов фирм по определённому региону.

 

Теперь разберёмся, как происходит непосредственно процесс парсинга. Когда выбран сайт, с которого планируется получить необходимую информацию, проводится предварительный анализ кода страницы. Парсеры, в отличие от поисковых ботов, устроены гораздо проще — им не требуется производить доскональный анализ всего документа, получая данные из тегов и считая релевантность. Подавляющее большинство сайтов используют шаблонную структуру, т. е. логика вывода данных заранее определена, а значит можно довольно просто найти на странице начало и конец требуемых границ. Чтобы было чуть понятнее, почему это так, рассмотрим, каким образом можно узнать количество найденных документов в выдаче по определённому запросу. Искать будем число упоминаний нашего любимого форума в поисковой системе Яндекса. Взглянём на исходный код возвращённой страницы и найдём в коде ограничители. Рисунок ниже иллюстрирует это:

 

Несмотря на то, что используется два разных запроса, можно абсолютно точно определить место, в котором указано число страниц (зелёная область между красными прямоугольниками Начальная/конечная граница парсинга). Теперь остаётся лишь вырезать требуемый кусок данных. Самое главное — абсолютно не важно, на каком языке программирования (PHP, Java, любой другой) или с помощью какой программы это выполняется. Поиск в строке реализован во всех языках. В общем, данный процесс можно условно разбить на четыре стадии:

  1. получить содержимое страницы по определённому адресу;
  2. найти текст, располагающийся между границами, и запомнить его;
  3. сохранить результат (это может быть база данных, CSV-файл или даже просто вывод в браузер);
  4. если есть ещё адреса, перейти на пункт 1.

Для написания парсера на PHP требуется некоторое количество знаний — в данной статье просто невозможно рассказать обо всех аспектах и возникающих, в связи с ними, сложностей. Но если этот язык программирования знаком, я подскажу пару способов, как можно упростить себе жизнь, не занимаясь полным разбором ‘вручную’.

 

Парсинг XML документов лучше осуществлять встроенными в PHP методами. Для этого существуют функции simplexml_load_file() — для разбора файла (можно даже удалённого, расположенного на другом сервере) и simplexml_load_string() — для разбора передаваемой строки. Функции возвращают объект класса SimpleXMLElement, через который можно получить доступ ко всем ‘ветвям’ и атрибутам исходного файла в иерархическом виде.

 

К сожалению, парсинг HTML данных таким способом невозможен. XML подразумевает документ, написанный без ошибок — это тоже язык разметки, но гораздо более строгий. Однако, для HTML уже есть несколько классов, которые вполне себе неплохо решают задачи разбора, это phpQuery и simple_html_dom. Обе библиотеки поддерживают так называемые ‘селекторы CSS’ — поиск узлов по описаниям, сходными с теми, что используются в CSS-файлах (вида ‘div p span’, ‘body div.content’, ‘#header’ и т. п.). Особых проблем с их использованием возникнуть не должно — на официальных сайтах есть разнообразные примеры.
Ещё не упомянуто про парсинг RSS. К счастью, он принадлежит к семейству XML, а значит, для разбора и получения данных годятся даже встроенные функции.

Ну а что же делать тем, кто с программированием на PHP не знаком? Для таких случаев имеется соответствующий софт.

 

Это программа для парсинга сайтов называется Content Downloader. Отличительная особенность — для полноценной работы не нужно знать никакого языка программирования. Можно даже не знать HTML — для этого реализовано выделение границ при клике во встроенном браузере (в области выше код, в этом случае, отмечается автоматически).

 

Понятно, что одним парсингом по установленной границе работа программы не ограничивается — их можно задать несколько. Можно указать, получать ли картинки. Для удобной работы с получаемыми данными имеется редактор шаблона вывода, что позволит сохранить результат в произвольном текстовом формате. Имеется так же возможность импортировать данные в некоторые CMS, в частности, WordPress.

 

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