Parsing de HTML em PHP: visão geral de bibliotecas e ferramentas
O parsing de HTML é uma das tarefas frequentes de um desenvolvedor web. Seja para extrair dados de um site de terceiros (scraping), analisar suas próprias páginas ou automatizar testes — não se pode prescindir de uma ferramenta confiável. O PHP, como linguagem de servidor, oferece várias maneiras de trabalhar com código HTML. Neste artigo, analisaremos as três bibliotecas mais populares: PHP Simple HTML DOM Parser, DiDOM e Symfony DomCrawler. Você conhecerá seus recursos, pontos fortes e fracos, além de ver exemplos de código.
Para que serve o parsing de HTML?
As funções nativas do PHP (file_get_contents, preg_match) são muito primitivas para tarefas complexas. Expressões regulares rapidamente se tornam complicadas e quebram com a menor alteração na estrutura do HTML. Bibliotecas especializadas permitem:
- Acessar elementos através de seletores CSS ou XPath;
- Navegar pela árvore DOM como em JavaScript;
- Extrair texto, atributos, links;
- Modificar HTML e salvar o resultado.
1. PHP Simple HTML DOM Parser
Uma das bibliotecas mais antigas e conhecidas. Funciona sem dependências externas, adequada para PHP 5.6+. Sua principal vantagem é a sintaxe intuitiva, que lembra jQuery.
Instalação
// Baixe o arquivo simple_html_dom.php do GitHubrequire_once 'simple_html_dom.php';Exemplo de uso
// Criando um objeto DOM a partir de uma URL$html = file_get_html('https://example.com');
// Encontrando todos os linksforeach($html->find('a') as $link) { echo $link->href . ' - ' . $link->plaintext . "";}
// Extraindo o título h1$h1 = $html->find('h1', 0);echo $h1 ? $h1->plaintext : 'Título não encontrado';
// Limpando a memória$html->clear();Prós e contras
- + Simplicidade e API intuitiva;
- + Não requer Composer;
- - Trabalho lento com documentos grandes;
- - Projeto não é atualizado há muito tempo;
- - Não suporta totalmente os padrões modernos do PHP 8.x.
2. DiDOM
Biblioteca moderna, ativamente mantida pela comunidade. Totalmente compatível com PHP 7.4–8.3. Usa seletores CSS e XPath, funciona muito mais rápido que o Simple HTML DOM.
Instalação via Composer
composer require imangazaliev/didomExemplo de uso
use DiDom\\Document;
$document = new Document('https://example.com', true);
// Buscando todos os links$links = $document->find('a');foreach ($links as $link) { echo $link->attr('href') . "";}
// Buscando por classe$items = $document->find('.product-title');foreach ($items as $item) { echo $item->text() . "";}
// Extraindo o primeiro elemento$firstTitle = $document->first('h2');echo $firstTitle ? $firstTitle->text() : 'Nenhum título encontrado';Prós e contras
- + Alta performance;
- + Suporte a seletores CSS de qualquer complexidade;
- + Trabalho com codificações;
- - Requer Composer;
- - Documentação em russo existe, mas é fragmentada.
3. Symfony DomCrawler
Parte do ecossistema Symfony, mas pode ser usada como biblioteca independente. Oferece uma API poderosa para navegação pelo DOM, extração de dados e trabalho com formulários.
Instalação
composer require symfony/dom-crawlercomposer require symfony/css-selector // para seletores CSSExemplo de uso
use Symfony\\Component\\DomCrawler\\Crawler;
$html = file_get_contents('https://example.com');$crawler = new Crawler($ Também na biblioteca
Cliente HTTP para Go (Golang): principais bibliotecas para trabalhar com HTTP
Java Image I/O API: redimensionamento e corte de imagens | Guia
Redis (ioredis) para JavaScript (Node.js): guia completo com exemplos
Trabalhando com Markdown em Go: bibliotecas blackfriday, goldmark e chroma