Парсинг 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 всегда делает тебе боль, никакой парсер этого не исправит.
0 комментариев