PHP Crawler: Разрабатываем «веб-шпиона» самостоятельно

PHP Crawler: Разрабатываем «веб-шпиона» самостоятельно

Crawler («червь»), жучок, бот или назовите это, как вам будет угодно, - это программа, которая в автоматическом порядке получает и использует информацию с сайтов и так далее.

Google, к примеру, индексирует и выставляет оценки веб-сайтам абсолютно автономно посредством мощных «спайдеров» или ботов. Существуют также сервисы проверки ссылок, валидаторы кода HTML, автоматизированные сервисы оптимизации и шпионы. Да-да, именно шпионы. Именно таким приложением мы и займёмся сегодня.

На самом деле, мы не уверены, привычный ли это термин в обществе и использовался он когда-нибудь ранее, но мы думаем, что этот термин идеально подходит как описание приложения. Основная цель – создать ПО, которое отслеживало бы цены на продукцию ваших конкурентов, чтобы вы всегда могли выиграть в ценовой политике.

Возможно, у вас возникнет мысли типа: «Ой, это бесполезно для меня. Я же фрилансер, мне не приходится иметь дела с разницей в ценах на услуги». Не беспокойтесь, вы правы, в какой-то степени. Но у вас могут быть такие клиенты, которым крайне важно быть впереди, так что вы тоже сможете быть впереди, и предложить им дополнительный сервис, так сказать, аналитики (не бойтесь даже завышать расценки). Всё это говорит о том, что и вам было бы неплохо уметь проводить сравнения.

PHP сервер на Linux – нам нужно будет использовать crontab, так что лучше выбрать хороший сервер.MySQL – нам нужно будет где-то хранить данные, поэтому нужна база данных.

Основа получения информации

Мы начнем с попыток создания функции получения информации, а именно с самого получения информации. Давайте предположим, что вы торгуете туфлями, а компания Zappos – ваш конкурент (хотя об этом только мечтать!). Первый продукт, который вам нужно отследить – прекрасная пара кроссовок Nike Free Run+ . Сейчас мы воспользуемся функцией fopen для открытия страницы, fgets для чтения каждой строки текста на странице и feof для определения окончания считывания информации. Сейчас вам надо активировать функцию fopen на сервере (проверьте этот параметр посредством phpinfo). Наш первый кусочек кода будет таким:

На данном этапе, если вы выведите $content, то увидите, что у нас есть все содержимое страницы, но без CSS и JS, так как на сайте Zappos везде проставлены сторонние ссылки на файлы.

Теперь у нас есть содержимое, и нам нужно определить цену продукта.

Как вы узнаете разницу между ценой и другой информацией на странице? Итак, это крайне просто, так как у каждой цены перед цифрами стоит знак «$», так что следующее, что мы сделаем – получим данные и запустим постоянное выражение для отображения цен со знаком $ со всей страницы.

Но наше постоянное выражение будет соответствовать каждой цене на странице. Так как Zappos явно удобен для шпионов, «официальные» цены у них стоят вначале. Всегда. Остальные просто используются посредством javascript, поэтому мы можем игнорировать их.

Наш Regex и выдача цен будет выглядеть примерно так:

Итак, теперь у нас есть цена. Не забудьте о других ценах. Они понадобятся нам, если на сайте Zappos произойдут изменения.

Сохраняем данные в MySQL

Давайте подготовим базу данных для хранения данных. Нужно создать таблицу zappos. Внутри неё нам нужны 4 колонки:

ID – ключевое поле в таблицеDate – дата, когда данные были получены. Это следует записывать, чтобы вы затем смогли делать отчеты.Value – значения, которые были извлеченыOther_values – значения, которые не являются теми, которые вам были нужны, но очень важно их сохранить на случай, если владелец веб-сайта внесет изменения в код, чтобы у вас оставался откат.

Посредством phpmyadmin создаём БД под названием spy, и внутри неё находится таблица zappos:

Как только вы создали таблицу, мы начнем вносить данные. Итак, нам понадобится создать соединение с БД в нашем PHP, а также подготовить прайс-листы к сохранению.

Так как наши данные передаются не идеально, нам нужно подготовить их. Итак, у нас будут лишь цифры и точки.Для соединения с БД мы будем использовать mysql_connect, а затем используем mysql_select_db для выбора базы данных spy, а дальше последует запрос посредством mysql_query для сохранения или получения данных.

Улучшаем шпиона посредством crontab

Итак, с помощью crontab мы можем запланировать некоторые задачи в системе Linux, чтобы они запускались в автономном режиме. Это полезно для вещей, относящихся к работе, связанной с БД, оптимизацией веб-сайта и многими другими вещами, которые не так и охота делать вручную.

Так как нашему шпиону нужна свежая информация, мы создадим задачу, которая будет запускаться каждый день в 1:00. На сайте net.tuts+ лежит очень доходчивая обучающая статья, посвященная планировке задач посредством cron , так что, если вы не знакомы с этим, то обязательно просмотрите статью.

Вкратце, у нас есть строки с командами, которыми мы можем воспользоваться:

Разработаем немного диаграмм

Если вы планируете использовать эти данные, то простая запись в базе данных не сильно вам поможет. Потому нам нужно как-то эту информацию «вывести на экран», так сказать.

Почти вся работа здесь будет выполняться идеальным jQuery-плагином gvChart . Он получает все данные из таблицы, и создает отличные диаграммы. Нам нужно лишь вывести данные в виде таблицы, чтобы плагин смог воспользоваться ими. На этот раз наш код будет выглядеть следующим образом (для более подробной информации скачайте демо-файл):

Теперь вы полностью довольны?

Конечно же, здесь можно много чего «подправить» и «подкрасить». Вы можете, например, сделать «лист ожидания» из url-адресов, которые следует проверить.

Что ещё по вашему мнению здесь можно добавить или исправить? Отписываемся в комментариях к статье .

Вам понравился материал? Поблагодарить легко! Будем весьма признательны, если поделитесь этой статьей в социальных сетях:

📎📎📎📎📎📎📎📎📎📎