Парсинг сторінок сайтів (html-контенту) на php
Парсинг сторінок сайтів (html-контенту) на php.
Замітка присвячується парсингу, зокрема парсинг сайтів, парсинг сторінок, парсинг в веб-середовищі, парсинг html-контенту сайту.
В процесі розробки різних веб-сервісів дуже часто доводиться стикатися з завданнями, в яких потрібно швидко отримати різного роду інформацію у великих обсягах. В основному це пов'язано з граббінг, крадіжкою інформації, як хочете це називайте. Справа в тому, що інформація доступна і відкрита. Особливість парсинга - це швидкий і автоматизований збір даних, контенту зі сторінок сайту.
Зараз дуже популярно парсити в веб-середовищі, а саме парсити сайту, який міститиме хоч якусь цінність і актуальність для людей. Особливою цінністю є каталог товарів, включаючи картинки, бази даних довідників і багато іншого, що може стати в нагоді для конкурентів.
Давайте спробуємо Спарс потрібну інформацію в html, спробуємо дістати все посилання з декількох сторінок нашого сайту.
Хочу показати 2 основних способи отримання контенту зі сторінки сайту:
1 варіант - php функція file_get_contents. Функція повертає html-рядок, яку ми будемо аналізувати довільні на посилання:
2 варіант - CURL. Бібліотека, яка підтримується php і має великий набір налаштувань, від POST-запитів до роботи з FTP. Розглянемо стандартний виклик бібліотеки curl, який віддасть нам контент сайту:
Тепер в нашій рядку $ out знаходиться контент всіх трьох сторінок. Отже, переходимо безпосередньо до парсингу нашої рядки.
Знову ж хочу показати 3 варіанти вирішення нашої задачі: "нативний" спосіб на php, за допомогою вбудованої бібліотеки DOMDocument і бібліотеки SimpleHTMLDOM.
1. php функція explode. Функція знаходить шуканий символ або частина рядка і ділить цілий рядок на елементи масиву.
Повторюся, нам необхідно отримати значення всіх атрибутів href у тегів a, для цього будемо ділити загальну рядок на деякі частини \ відрізки:
Якщо роздрукувати наш масив, буде приблизно наступне:
2. вбудована бібліотека DOMDocument. Працюємо з класом приблизно наступним чином:
Результат такого коду рівно такий же, що і з допомогою функції explode.
3. бібліотека SimpleHTMLDOM. Її необхідно підключати з файлу. Робота приблизно схожа з DOMDocument. Працюємо з класом:
Повторюся, результат в масив рівно такий же як і вище в двох перерахованих вище.