Парсинг HTML в PHP: обзор библиотек и инструментов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Парсинг HTML в PHP: обзор библиотек и инструментов

Парсинг HTML — одна из частых задач веб-разработчика. Будь то извлечение данных с чужого сайта (скрапинг), анализ собственных страниц или автоматизация тестирования — без надёжного инструмента не обойтись. PHP, как серверный язык, предоставляет несколько способов работы с HTML-кодом. В этой статье мы разберём три самые популярные библиотеки: PHP Simple HTML DOM Parser, DiDOM и Symfony DomCrawler. Вы узнаете их возможности, сильные и слабые стороны, а также увидите примеры кода.

Зачем нужен парсинг HTML?

Встроенные функции PHP (file_get_contents, preg_match) слишком примитивны для сложных задач. Регулярные выражения быстро становятся громоздкими и ломаются при малейшем изменении структуры HTML. Специализированные библиотеки позволяют:

  • Обращаться к элементам через CSS-селекторы или XPath;
  • Обходить DOM-дерево как в JavaScript;
  • Извлекать текст, атрибуты, ссылки;
  • Модифицировать HTML и сохранять результат.

1. PHP Simple HTML DOM Parser

Одна из старейших и самых известных библиотек. Работает без внешних зависимостей, подходит для PHP 5.6+. Её главное преимущество — интуитивный синтаксис, напоминающий jQuery.

Установка

// Скачайте файл simple_html_dom.php с GitHub
require_once 'simple_html_dom.php';

Пример использования

// Создаём объект DOM из URL
$html = file_get_html('https://example.com');

// Находим все ссылки
foreach($html->find('a') as $link) {
    echo $link->href . ' - ' . $link->plaintext . "\n";
}

// Извлекаем заголовок h1
$h1 = $html->find('h1', 0);
echo $h1 ? $h1->plaintext : 'Заголовок не найден';

// Очищаем память
$html->clear();

Плюсы и минусы

  • + Простота и понятный API;
  • + Не требует Composer;
  • - Медленная работа с большими документами;
  • - Проект давно не обновлялся;
  • - Не поддерживает современные стандарты PHP 8.x полностью.

2. DiDOM

Современная библиотека, активно поддерживаемая сообществом. Полностью совместима с PHP 7.4–8.3. Использует CSS-селекторы и XPath, работает в разы быстрее Simple HTML DOM.

Установка через Composer

composer require imangazaliev/didom

Пример использования

use DiDom\Document;

$document = new Document('https://example.com', true);

// Поиск всех ссылок
$links = $document->find('a');
foreach ($links as $link) {
    echo $link->attr('href') . "\n";
}

// Поиск по классу
$items = $document->find('.product-title');
foreach ($items as $item) {
    echo $item->text() . "\n";
}

// Извлечение первого элемента
$firstTitle = $document->first('h2');
echo $firstTitle ? $firstTitle->text() : 'Нет заголовков';

Плюсы и минусы

  • + Высокая производительность;
  • + Поддержка CSS-селекторов любой сложности;
  • + Работа с кодировками;
  • - Требует Composer;
  • - Документация на русском есть, но фрагментарна.

3. Symfony DomCrawler

Часть экосистемы Symfony, но может использоваться как самостоятельная библиотека. Предоставляет мощный API для навигации по DOM, извлечения данных и работы с формами.

Установка

composer require symfony/dom-crawler
composer require symfony/css-selector  // для CSS-селекторов

Пример использования

use Symfony\Component\DomCrawler\Crawler;

$html = file_get_contents('https://example.com');
$crawler = new Crawler($html);

// Извлечение заголовков h2
$crawler->filter('h2')->each(function ($node) {
    echo $node->text() . "\n";
});

// Получение всех ссылок и их текстов
$links = $crawler->filter('a')->extract(['href', '_text']);
foreach ($links as $link) {
    echo "                    

Рекомендаций