Парсинг HTML в PHP — это всегда маленькая война с чужим кодом и кривыми страницами. Парсинг — это когда ты берёшь чужой HTML или XML и пытаешься вытащить из него что-то осмысленное. В PHP есть куча библиотек, но большинство из них либо тормозят, либо ведут себя как ненадежные соседи — вроде вроде бы делают работу, но иногда выкидывают ошибку, когда меньше всего ждёшь.

Я перечислю те, что реально полезны, и расскажу, где стоит включать мозг, а где хватит просто Composer-а.

1. Simple HTML DOM Parser

Просто и быстро. Это библиотека, которая позволяет работать с HTML как с jQuery. Хочешь найти заголовок — find('title', 0)->plaintext и готово.

composer require simplehtmldom/simplehtmldom

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

require 'vendor/autoload.php';
use simplehtmldom\HtmlWeb;

$html = new HtmlWeb();
$doc = $html->load('http://example.com');

$title = $doc->find('title', 0)->plaintext;
echo $title;

Плюсы: лёгкая, быстро стартовать, синтаксис понятен.
Минусы: на больших документах тормозит, память ест как свинья.

Идеально для простых скриптов и быстрого прототипа.

2. PHP Simple HTML DOM Parser

Практически брат-близнец предыдущей библиотеки, но интерфейс чуть другой. Иногда удобнее, иногда — нет.

composer require paquettg/php-html-parser
require 'vendor/autoload.php';
use PHPHtmlParser\Dom;

$dom = new Dom;
$dom->load('http://example.com');

$title = $dom->find('title')[0]->text;
echo $title;

Плюсы: удобный API, более строгий по сравнению с Simple HTML DOM.
Минусы: иногда выкидывает странные ошибки на «кривом» HTML, не такой быстрый как Parsedown (ну почти).

3. Goutte

Goutte — это уже серьёзный инструмент для веб-скрапинга. Использует Symfony BrowserKit и DomCrawler. Позволяет крутить запросы, формы, куки — почти как настоящий браузер, но без интерфейса.

composer require fabpot/goutte
require 'vendor/autoload.php';
use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'http://example.com');

$title = $crawler->filter('title')->text();
echo $title;

Плюсы: мощный, можно скрапить сайты с формами и куки.
Минусы: медленнее и громоздче, чем простые парсеры. Если тебе просто нужно вытащить <p> — перебор.

4. Symfony DomCrawler

Компонент от Symfony, который иногда используют вместе с Goutte, но можно отдельно. Очень гибкий API, позволяет легко извлекать данные из HTML и XML.

composer require symfony/dom-crawler
require 'vendor/autoload.php';
use Symfony\Component\DomCrawler\Crawler;

$html = '<html><body><p class="message">Hello World!</p></body></html>';
$crawler = new Crawler($html);

$text = $crawler->filter('.message')->text();
echo $text;

Плюсы: гибкий, строгий, удобный для сложных документов.
Минусы: для простого скрапинга — оверхед, много кода ради пары строк.

Как выбирать парсер

  • Для простого извлечения текста: Simple HTML DOM Parser или PHP Simple HTML DOM Parser. Лёгкие, быстрые, не ломаются на маленьких страницах.
  • Для сложного веб-скрапинга: Goutte. Работает с формами, куки, редиректами.
  • Для работы с большим или кривым HTML/XML: Symfony DomCrawler. Да, код громоздкий, но он реально помогает контролировать процесс.

Если ставишь цель «вытащить пару тегов с сайта» — не бери Goutte. Если хочешь сделать робота, который логинится, кликает, собирает данные — забудь Simple HTML DOM Parser.

Итог

Парсинг на PHP — это всегда компромисс между удобством, скоростью и стабильностью. Простые библиотеки быстрые и понятные, но на больших документах глючат. Мощные — стабильные и гибкие, но писать на них как на Symfony-танках ради простого title — перебор.

Выбирай библиотеку под задачу, а не потому что она «крутая». И помни: чужой HTML всегда делает тебе боль, никакой парсер этого не исправит.