Parsing de HTML em PHP: DOMDocument, SimpleXML e cURL para Web Scraping

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Parsing de HTML em PHP: Guia Completo para Extrair Dados de Páginas Web



O parsing de HTML é uma das tarefas-chave do desenvolvimento web, permitindo extrair automaticamente dados estruturados de páginas web. O PHP oferece ferramentas integradas poderosas para esse fim, incluindo as extensões DOMDocument e SimpleXML, além da biblioteca cURL para trabalhar com requisições HTTP. Neste artigo, vamos detalhar como fazer parsing de HTML em PHP, abordando as melhores práticas, tratamento de erros e exemplos de código.



Principais Ferramentas para Parsing de HTML em PHP



Para o parsing de HTML em PHP, são utilizados os seguintes componentes principais:



  • DOMDocument — classe integrada para trabalhar com a árvore DOM de HTML/XML. Permite carregar, modificar e extrair elementos.
  • DOMXPath — extensão para DOMDocument, permitindo executar consultas XPath para busca precisa de nós.
  • SimpleXML — extensão simplificada para trabalhar com XML, mas também pode ser usada para HTML, desde que a estrutura seja válida.
  • cURL — biblioteca para realizar requisições HTTP, necessária para obter o código HTML de páginas remotas.


Exemplo Passo a Passo de Parsing de HTML com DOMDocument



Vamos considerar um exemplo completo de parsing de uma página HTML. Suponha que precisamos extrair os títulos de artigos (tags <h2>) e links (<a>) de um site.



<?php// 1. Obtém o código HTML da página usando cURL$url = 'https://example.com/articles';$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');$html = curl_exec($ch);if (curl_errno($ch)) {    die('Erro cURL: ' . curl_error($ch));}curl_close($ch);

// 2. Cria um objeto DOMDocument e carrega o HTML$dom = new DOMDocument();libxml_use_internal_errors(true); // Suprime erros de parsing de HTML inválido$dom->loadHTML($html);libxml_clear_errors();

// 3. Cria um objeto DOMXPath para busca facilitada$xpath = new DOMXPath($dom);

// 4. Extrai todos os títulos h2$headings = $xpath->query('//h2');echo "<h3>Títulos dos Artigos:</h3>";foreach ($headings as $heading) { echo "<p>" . htmlspecialchars($heading->nodeValue) . "</p>";}

// 5. Extrai todos os links com a classe 'article-link'$links = $xpath->query('//a[@class="article-link"]');echo "<h3>Links para os Artigos:</h3>";foreach ($links as $link) { $href = $link->getAttribute('href'); $text = $link->nodeValue; echo "<p><a href='" . htmlspecialchars($href) . "'>" . htmlspecialchars($text) . "</a></p>";}?>


Usando SimpleXML para Casos Simples



O SimpleXML é útil para fazer parsing de documentos HTML bem estruturados, mas não lida bem com HTML inválido. Exemplo de extração de dados de uma tabela:



<?php$html = '<table><tr><td>Célula 1</td><td>Célula 2</td></tr></table>';$xml = simplexml_load_string($html);if ($xml === false) {    echo "Erro ao carregar HTML";} else {    foreach ($xml->tr->td as $cell) {        echo "Dados: " . htmlspecialchars($cell) . "<br>";    }}?>


Tratamento de Erros e Melhores Práticas



Ao fazer parsing de HTML em PHP, é importante considerar os seguintes pontos:



  • Supressão de erros: Use libxml_use_internal_errors(true) antes de carregar o HTML para evitar a exibição de avisos sobre marcação inválida.
  • Codificação: Certifique-se de que o HTML seja carregado na codificação correta (UTF-8). Se necessário, use mb_convert_encoding().
  • User-Agent: Sempre

Recommendations