Парсинг на php. Основы
Что такое парсер? Парсер - это скрипт, который автоматически, по шаблону, собирает информацию с выбранного ресурса, и сохраняет, в удобном для нас виде. Например, нам нужно скачать 1000 статей с сайта кулинарных рецептов. И задача парсера заключается в том, чтобы автоматически собрать ссылки на все эти 1000 статей, перейти по каждой из них, и получить полезные для нас данные.
В общем случае, парсер получает html-разметку, из которой он извлекает полезную информацию, путём доступных ему средств (DOM-парсинг, регулярные выражения, и т.п.). И, вот, эту полезную информацию, мы, на выходе, и получаем, в чистом виде. Как обрабатывать её, тоже решать нам.
И так, можно выделить 3 основных этапа парсинга:
- HTTP-запрос на сайт, для получения разметки сайта
- Извлечение полезной информации из загруженной зразметки
- Формирование отчёта по найденным данным, и дальнейшая обработка
Для того, чтобы получить разметку сайта, нужно сделать http-запрос. Вот для этого, в PHP и существует такая программа, как CURL. Это программа, которая делает запрос к указанному серверу, с указанными нами параметрами (тело запроса, заголовки, cookies, метод запроса, и т.д.). На самом деле, эта программа используется и для отправки API-запросов, однако, большее распространение она получила именно в написании ботов, и парсеров. Для запросов к API, обычно используют функцию file_get_contents, вместе с надстройкой для отправки кастомных запросов.
Curl - это не какая-то часть PHP, которая есть только в нём. CURL - это отдельная, независимая программа, являющаяся браузером, управляемым из консоли. А PHP лишь имеет модуль, который упрощает работу с этой программой, и позволяет делать запросы на собственном синтаксисе.
На практике, парсеры бывают очень полезными. Так, с помощью них можно скачать все картинки с сайта, все видео, или все статьи.
Часто новые интернет-магазины, для автоматического наполнения товарами, как раз и пользуются парсерами, которые автоматизируют работу копирования товаров, или автоматическое обновление цен, в зависимости от цен конкурентов.
При этом, парсеры могут содержать дополнительную логику по преобразованию (удаление фрагментов текста, редактирование картинок, увеличение цены на определённый процент).
Новостные сайты, агрегирующие новости одновременно с нескольких сайтов, аналогично, не могут обходиться без средств автоматизации.
Второй вариант использования CURL - это боты, которые автоматизируют рутинные действия: авторизуются под вашим аккаунтом, забирают бонусы, автоматически добавляют посты, комментарии, переходят по ссылке из писем, и т.д. На самом деле, применение этих "зверушек" очень широкое, потому, знать это стоит, хотя бы основы. Уверен, что в личном опыте, эти знания сыграют вам хорошую службу.
Говоря о практическом применении, последним моим парсером был скрипт, копирующий видеоуроки с сайта, сохраняя каждый видеоурок в отдельную папку.
Ещё в начале пути я интересовался, как создать парсер на php. И, на удивление, это оказалось достаточно просто. Для того, чтобы понять, как парсеры работают внутри, прочитайте две вводных статьи:
- Как парсить с помощью file_get_contents
- Как парсить с помощью curl - основы PHP CURL. Объяснение работы функции
curl_init
Эта статья является исключительно теорией. Она только объясняет основные термины, которые нужны для понимания того, как работают парсеры. Потому, чтобы научиться писать хорошие парсеры, нужно писать много парсеров, и читать последующие статьи по теме =)