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, щоб вони запускалися в автономному режимі. Це корисно для речей, що стосуються роботи, пов'язаної з БД, оптимізацією веб-сайту та багатьма іншими речами, які не так і хочеться робити вручну.

Коротко, ми маємо рядки з командами, якими ми можемо скористатися:

Розробимо трохи діаграм

самостійно

Якщо ви плануєте використовувати ці дані, то простий запис у базі даних не дуже вам допоможе. Тому нам треба якось цю інформацію вивести на екран, так би мовити.

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

Тепер виповністю задоволені?