Parseo de HTML en PHP: DOMDocument, SimpleXML y cURL para web scraping

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Parseo de HTML en PHP: Guía completa para extraer datos de páginas web



El parseo de HTML es una de las tareas clave del desarrollo web, que permite extraer automáticamente datos estructurados de páginas web. PHP ofrece potentes herramientas integradas para este propósito, incluyendo las extensiones DOMDocument y SimpleXML, así como la biblioteca cURL para trabajar con solicitudes HTTP. En este artículo, analizaremos en detalle cómo parsear HTML en PHP, revisaremos las mejores prácticas, el manejo de errores y ejemplos de código.



Herramientas principales para el parseo de HTML en PHP



Para el parseo de HTML en PHP se utilizan los siguientes componentes principales:



  • DOMDocument — clase integrada para trabajar con el árbol DOM de HTML/XML. Permite cargar, modificar y extraer elementos.
  • DOMXPath — extensión para DOMDocument que permite ejecutar consultas XPath para una búsqueda precisa de nodos.
  • SimpleXML — extensión simplificada para trabajar con XML, pero también se puede usar para HTML siempre que la estructura sea correcta.
  • cURL — biblioteca para realizar solicitudes HTTP, necesaria para obtener el código HTML de páginas remotas.


Ejemplo paso a paso de parseo de HTML con DOMDocument



Consideremos un ejemplo completo de parseo de una página HTML. Supongamos que necesitamos extraer los títulos de artículos (etiquetas <h2>) y los enlaces (<a>) de un sitio web.



<?php// 1. Obtenemos el código HTML de la página con 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('Error de cURL: ' . curl_error($ch));}curl_close($ch);

// 2. Creamos un objeto DOMDocument y cargamos el HTML$dom = new DOMDocument();libxml_use_internal_errors(true); // Suprimimos errores de parseo de HTML no válido$dom->loadHTML($html);libxml_clear_errors();

// 3. Creamos un objeto DOMXPath para búsquedas convenientes$xpath = new DOMXPath($dom);

// 4. Extraemos todos los títulos h2$headings = $xpath->query('//h2');echo "<h3>Títulos de artículos:</h3>";foreach ($headings as $heading) { echo "<p>" . htmlspecialchars($heading->nodeValue) . "</p>";}

// 5. Extraemos todos los enlaces con la clase 'article-link'$links = $xpath->query('//a[@class="article-link"]');echo "<h3>Enlaces a artículos:</h3>";foreach ($links as $link) { $href = $link->getAttribute('href'); $text = $link->nodeValue; echo "<p><a href='" . htmlspecialchars($href) . "'>" . htmlspecialchars($text) . "</a></p>";}?>


Uso de SimpleXML para casos simples



SimpleXML es útil para parsear documentos HTML bien estructurados, pero no maneja HTML no válido. Ejemplo de extracción de datos de una tabla:



<?php$html = '<table><tr><td>Celda 1</td><td>Celda 2</td></tr></table>';$xml = simplexml_load_string($html);if ($xml === false) {    echo "Error al cargar HTML";} else {    foreach ($xml->tr->td as $cell) {        echo "Datos: " . htmlspecialchars($cell) . "<br>";    }}?>


Manejo de errores y mejores prácticas



Al parsear HTML en PHP es importante tener en cuenta los siguientes aspectos:



  • Supresión de errores: Use libxml_use_internal_errors(true) antes de cargar el HTML para evitar mostrar advertencias sobre marcado no válido.
  • Codificación: Asegúrese de que el HTML se cargue en la codificación correcta (UTF-8). Si es necesario, use mb_convert_encoding().
  • User-Agent: Siempre

Recommendations