Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Крок 1. Підготовка

В першу чергу потрібно скопіювати бібліотеку simpleHTMLdom. яка доступна на сайті sourceforge.net.

В архіві для завантаження зберігаються декілька файлів, але вам потрібен тільки один simple_html_dom.php. Всі інші файли - це приклади і документація.

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Крок 2. Основи парсинга

Дану бібліотеку дуже просто використовувати, але є кілька основних моментів, які слід вивчити до того, як ви почнете приводити її в дію.

Завантаження HTML

Ви можете створити вихідний об'єкт завантаживши HTML або з рядка, або з файлу. Завантаження з файлу може бути виконана або через вказівку URL. або з вашої локальної файлової системи.

Примітки: Метод load_file () делегує роботу функції PHP file_get_contents. Якщо allow_url_fopen не встановлено в значення true в вашому файлі php.ini. може бути відсутнім можливість відкривати віддалені файли таким чином. В цьому випадку ви можете повернутися до використання бібліотеки CURL для завантаження віддалених сторінок, а потім прочитати за допомогою методу load ().

Доступ до інформації

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Як тільки у вас буде об'єкт DOM, ви зможете запрацювати з ним, використовуючи спосіб find () і створюючи колекції. Колекція - це група об'єктів, знайдених по селектору. Синтаксис дуже схожий на jQuery.

В даному прикладі HTML ми збираємося розібратися, як отримати доступ до інформації у другому параграфі, змінити її і потім вивести результат дій.

Рядки 2-4. Завантажуємо HTML з рядка, як пояснювалося вище.

Рядок 6. Знаходимо всі теги

в HTML, і повертаємо їх у масив. Перший параграф буде мати індекс 0, а наступні параграфи індексуються відповідно.

Рядок 8. Отримуємо доступ до другого елементу в нашій колекції параграфів (індекс 1), додаємо текст до його атрибуту innertext. Атрибут innertext представляє вміст між тегами, а атрибут outertext представляє вміст включаючи теги. Ми можемо замінити тег повністю, використовуючи атрибут outertext.

Тепер додамо один рядок і модифікуємо клас тега нашого другого параграфа.

Остаточний вигляд HTML після команди save матиме вигляд:

інші селектори

Кілька інших прикладів селектор. Якщо ви використовували jQuery, все здасться вам знайомим.

Перший приклад вимагає пояснень. Всі запити за замовчуванням повертають колекції, навіть запит з ID, який повинен повернути тільки один елемент. Однак, задаючи другий параметр, ми говоримо "повернути тільки перший елемент з колекції".

Це означає, що $ single - одиничний елемент, а не НЕ масив елементів з одним членом.

Інші приклади досить очевидні.

документація

Повна документація по бібліотеці доступна на сторінці проекту.

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Крок 3. Приклад з реального світу

Для демонстрації бібліотеки в дії ми напишемо скрипт для скрепінга вмісту сайту net.tutsplus.com і формування списку заголовків і опису статей, представлених на сайте ... .тільки як приклад. Скрепінг відноситься до області трюків в веб, і не повинен вживатись без дозволу власника ресурсу.

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Почнемо з підключення бібліотеки і виклику функції getArticles із зазначенням сторінки, з якої ми хочемо почати парсинг.

Крок 4. Початок функції парсинга

Крок 5. Знаходимо ту інформацію, яка нам потрібна

Парсинг html і скрепінг з допомогою простої бібліотеки html dom

Це суть функції getArticles. Потрібно розібратися більш детально, щоб зрозуміти, що відбувається.

Рядок 1. Створюємо масив елементів - тег div з класом preview. Тепер у нас є колекція статей, збережена в $ items.

Рядок 4. $ post тепер посилається на одиничний div класу preview. Якщо ми поглянемо до оригінального HTML, то побачимо, що третій елемент нащадок - це тег H1. який містить заголовок статті. Ми беремо його і присвоюємо $ articles [index] [0].

Рядок 5. Шостий нащадок $ post - це

. Нам потрібен текст опису з нього, тому ми використовуємо outertext - в опис буде включений тег параграфа. Одинична запис в масиві статей буде виглядати приблизно так:

Крок 6, Робота зі сторінками

насамперед потрібно визначити, як знайти наступну сторінку. На сайті Nettuts + про номер сторінки дуже легко здогадатися по URL, але нам потрібно отримувати посилання в парсінгу.

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Якщо подивитися на HTML, то можна знайти наступне:

Потім ми присвоюємо посилання HREF змінної $ URL. Це важливо, тому, що далі ми видаляємо об'єкт HTML. Щоб запобігти витоку пам'яті в php5, поточний об'єкт simple_html_dom має бути очищений і разустановлен перш ніж інший об'єкт буде створений. Якщо цього не зробити, то вся доступна пам'ять може бути поглинена.

На завершення ми викликаємо функцію getArticles з URL наступної сторінки. Рекурсія переривається, коли не залишається сторінок для парсинга.

Крок 7. Висновок результатів

Перше, ми збираємося встановити кілька основних стилів. Все абсолютно довільно - ви можете встановлювати те, що подобається.

Парсинг html і скрепінг за допомогою простої бібліотеки html dom

Потім ми пишемо маленьку функцію на PHP в сторінці для виведення попередньо збереженої інформації.

Остаточний результат - це одна сторінка HTML зі списком всіх статей зі сторінок Nettuts +, починаючи з тієї, яка була вказана в першому виклику getArticles ().

Крок 8. Висновок

Якщо Ви запускаєте парсинг для великої кількості сторінок (скажімо, весь сайт), то це може забрати багато часу. На такому сайті як Nettuts +, який має більш 86страніц, процес парсинга може тривати більше хвилини.

Даний урок відкриває для вас тему парсинга HTML. Існують інші методи методи роботи з DOM, які дозволяють працювати з селектором xpath для пошуку елементів. Описана в даному уроці бібліотека проста для використання і відмінно підходить для швидкого старту. Пам'ятайте, що потрібно питати дозволу, перш проводити скрепінг сайту.

5 останніх уроків рубрики "PHP"

Коли мова йде про безпеку веб-сайту, то фраза "фільтруйте все, екрануйте все" завжди буде актуальна. Сьогодні поговоримо про фільтрації даних.

  • Expressive 2 підтримує можливість підключення інших ZF компонент за спеціальною схемою. Не всім подобається це рішення. У цій статті ми розповімо як поліпшили процес підключення декількох модулів.

  • Припустимо, що вам необхідно відправити якусь інформацію в Google Analytics з серверного скрипта. Як це зробити. Відповідь в цій замітці.

  • Підбірка з декількох видів PHP пісочниць. На деяких ви в режимі online зможете потестить свій код, але є так само рішення, які можна впровадити на свій сайт.

    Парсинг html і скрепінг за допомогою простої бібліотеки html dom

    За рахунок отримання інформації відразу по двох каналах (зір і слух) ефективність навчання значно перевершує навчання по книгах. А домашні завдання і онлайн-тести дозволять вам постійно думати на мові, що вивчається і відразу перевіряти свої знання!

    Парсинг html і скрепінг за допомогою простої бібліотеки html dom

    Парсинг html і скрепінг за допомогою простої бібліотек html dom

    Якщо ви давно хочете як слід вивчити HTML, то у мене для Вас є чудова новина!

    Парсинг html і скрепінг з допомогою простої бібліотеки html dom

    Якщо ви вже вивчили HTML і хочете рухатися далі, то наступним кроком буде вивчення технології CSS.

    Парсинг html і скрепінг за допомогою простої бібліотеки html dom

    Якщо ви хочете розібратися з поняттями домену і хостингу, навчитися створювати бази даних, закачувати файли сайту на сервер по FTP, створювати піддомени, налаштовувати поштові скриньки для свого сайту і стежити за його відвідуваністю, то цей курс створений спеціально для вас!