---
title: "Cómo analizar HTML con PHP en 2026"
slug: parse-html-with-php
date: 2025-06-10T08:39:47+00:00
modified: 2025-11-04T08:49:22+00:00
permalink: https://brightdata.es/blog/datos-web/parse-html-with-php
type: blog
---

[ Blog ](https://brightdata.es/blog "Blog") / [Datos web](https://brightdata.es/blog/datos-web)







 [Datos web](https://brightdata.es/blog/datos-web)

# Cómo analizar HTML con PHP en 2026

Esta guía compara tres técnicas de análisis de PHP HTML, destacando sus puntos fuertes y sus diferencias para ayudarle a elegir la solución adecuada.

 3 min de lectura





 [ ![Antonello Zanini](https://media.brightdata.es/2022/12/Antonello-Zanini-2-50x50.jpg) ](https://brightdata.com/blog/authors/antonello-zanini)

 [Antonello Zanini

Technical Writer

 ](https://brightdata.com/blog/authors/antonello-zanini)





 ![Parsing HTML With PHP blog image](https://media.brightdata.es/2025/02/Parsing-HTML-With-PHP.svg)





En esta guía, verá:

- Razones por las que es útil analizar HTML en PHP
- Los requisitos para empezar con el objetivo del artículo
- Cómo parsear HTML en PHP usando:
    - `DomHTMLDocumento`
    - Analizador DOM de HTML simple
    - `DomCrawler` de Symfony
- Cuadro comparativo de los tres enfoques

Sumerjámonos.

## <a></a>¿Por qué analizar HTML en PHP?

El análisis sintáctico de HTML en PHP implica convertir el contenido HTML en su estructura DOM[(Document Object Model](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)). Una vez en el formato DOM, puede navegar y manipular fácilmente el contenido HTML.

En particular, las principales razones para analizar HTML en PHP son:

- **Extracción de datos**: Recopilar contenido específico de páginas web, como texto o atributos de elementos HTML.
- **Automatización**: Automatice tareas como el scraping de contenidos, la elaboración de informes y la agregación de datos a partir de contenidos HTML.
- **Manipulación de contenidos HTML del lado del servidor**: Analiza HTML para manipular, limpiar o dar formato al contenido web en el servidor antes de mostrarlo en tu aplicación.

[Descubre las mejores bibliotecas de análisis sintáctico de HTML](/blog/datos-web/best-html-parsers).

## <a></a>Requisitos previos

Antes de empezar a codificar, asegúrate de que tienes [PHP 8.4+](https://www.php.net/releases/8.4/en.php) instalado en tu máquina. Puede comprobarlo ejecutando el siguiente comando:

```none
php -v

```

El resultado debería ser algo parecido a esto:

```none
PHP 8.4.3 (cli) (built: Jan 19 2026 14:20:58) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.3, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.3, Copyright (c), by Zend Technologies

```

A continuación, desea inicializar un proyecto Composer para facilitar la gestión de dependencias. Si Composer no está instalado en su sistema, [descárguelo y siga las instrucciones de instalación](https://getcomposer.org/download/).

En primer lugar, cree una nueva carpeta para su proyecto PHP HTML:

```none
mkdir php-html-parser

```

Navega a la carpeta en tu terminal e inicializa un proyecto Composer dentro de ella usando el comando `composer init`:

```none
composer init

```

Durante este proceso, se le harán algunas preguntas. Las respuestas por defecto funcionarán, pero si lo desea, puede añadir detalles más específicos para su proyecto de análisis PHP HTML.

A continuación, abra la carpeta del proyecto en su IDE favorito. [Visual Studio Code con la extensión PHP](https://code.visualstudio.com/docs/languages/php) o [IntelliJ WebStorm](https://www.jetbrains.com/webstorm/) son buenas opciones para el desarrollo PHP.

Ahora, añade un archivo `index.php` vacío a la carpeta del proyecto. La estructura del proyecto debería ser la siguiente:

```none
php-html-parser/
  ├── vendor/
  ├── composer.json
  └── index.php

```

Abre `index.php` y añade el siguiente código para inicializar tu proyecto:

```none
<?php

require_once __DIR__ . "/vendor/autoload.php";

// scraping logic...

```

Este archivo pronto contendrá la lógica para parsear HTML en PHP.

Ahora puede ejecutar su script con este comando:

```none
php index.php

```

Muy bien. Ya está todo listo para comenzar a analizar HTML en PHP. A partir de aquí, puede empezar a añadir la lógica necesaria de recuperación y análisis de HTML a su script.

## <a></a>Recuperación de HTML en PHP

Antes de analizar HTML en PHP, se necesita algo de HTML para analizar. En esta sección, veremos dos enfoques diferentes para acceder al contenido HTML en PHP.

### <a></a>Con CURL

PHP soporta de forma nativa [cURL](/blog/datos-web/what-is-curl), un popular cliente HTTP utilizado para realizar peticiones HTTP. [Habilite la extensión cURL](https://www.php.net/manual/en/book.curl.php) o instálela en Linux con:

```none
sudo apt-get install php8.4-curl

```

Puede utilizar cURL para enviar una [solicitud HTTP GET](text=methods%20in%20HTTP.-,GET,-In%20HTTP%2C%20the) a un servidor en línea y recuperar el documento HTML devuelto por el servidor.

A continuación se muestra un script de ejemplo que realiza una simple petición GET y recupera contenido HTML:

```none
// initialize cURL session
$ch = curl_init();

// set the URL you want to make a GET request to
curl_setopt($ch, CURLOPT_URL, "https://www.scrapethissite.com/pages/forms/?per_page=100");

// return the response instead of outputting it
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// execute the cURL request and store the result in $response
$html = curl_exec($ch);

// close the cURL session
curl_close($ch);

// output the HTML response
echo $html;

```

Añada el fragmento anterior a `index.php` y ejecútelo. Producirá el siguiente código HTML:

```none
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Hockey Teams: Forms, Searching and Pagination | Scrape This Site | A public sandbox for learning web scraping</title>
    <link rel="icon" type="image/png" href="/static/images/scraper-icon.png" />
    <!-- Omitted for brevity... -->
</html>

```

Obtenga más información en nuestra guía sobre [solicitudes GET cURL en PHP](/blog/procedimientos/curl-get-request-with-php).

### <a></a>Desde un archivo

Otra forma de obtener el contenido HTML es almacenarlo en un archivo específico. Para ello:

1. Visite una página de su elección en el navegador
2. Haga clic con el botón derecho en la página
3. Seleccione la opción “Ver fuente de la página
4. Copiar y pegar el HTML en un archivo

También puede escribir su propia lógica HTML en un archivo.

Para este ejemplo, supondremos que el archivo se llama `index.html`. Contiene el HTML de la página “Equipos de hockey” de [Scrape This Site](https://www.scrapethissite.com/pages/forms/?per_page=100), que se recuperó previamente mediante cURL:

![El archivo index.html en la carpeta del proyecto](https://media.brightdata.com/2025/02/The-index.html-file-in-the-project-folder-1024x608.png)## <a></a>Análisis de HTML en PHP: 3 Enfoques

En esta sección, aprenderá a utilizar tres bibliotecas diferentes para analizar HTML en PHP:

1. Uso de `DomHTMLDocument` para PHP vainilla
2. Uso de la biblioteca Simple HTML DOM Parser
3. Uso del componente `DomCrawler` de Symfony

En los tres casos, verá cómo analizar la cadena HTML recuperada a través de cURL o el contenido HTML leído del archivo local `index.html`.

A continuación, aprenderá a utilizar los métodos proporcionados por cada biblioteca PHP de análisis sintáctico HTML para seleccionar todas las entradas del equipo de hockey de la página y extraer datos de ellas:

![El cuadro de la página de destino](https://media.brightdata.com/2025/02/The-table-on-the-target-page-1024x553.png)El resultado final será una lista de entradas de equipos de hockey raspados con los siguientes detalles:

- Nombre del equipo
- Año
- Gana
- Pérdidas
- Gana %.
- Goles a favor (GF)
- Goles en contra (GA)
- Diferencia de goles

Puede extraerlos de la tabla HTML con esta estructura:

![La estructura HTML DOM de las filas de la tabla](https://media.brightdata.com/2025/02/The-HTML-DOM-structure-of-the-tables-rows-1024x567.png)Como puede ver, cada columna de una fila de tabla tiene una clase específica. Puedes extraer datos de ella seleccionando elementos utilizando su clase como selector CSS y luego recuperando su contenido accediendo a su texto.

Tenga en cuenta que el análisis de HTML es sólo un paso en un script de web scraping. Para profundizar más, lee nuestro tutorial sobre [web scraping con PHP](/blog/procedimientos/web-scraping-php).

Ahora, vamos a explorar tres enfoques diferentes para el análisis sintáctico de HTML en PHP.

## <a></a>Método nº 1: Con DomHTMLDocument

PHP 8.4+ viene con una clase [`DomHTMLDocument`](https://www.php.net/manual/en/class.dom-htmldocument.php) incorporada. Esto representa un documento HTML y le permite analizar el contenido HTML y navegar por el árbol DOM. Vea cómo usarla para analizar HTML en PHP.

### <a></a>Paso 1: Instalación y configuración

`DomHTMLDocument` es parte de la [Librería Estándar de PHP](https://www.php.net/manual/en/book.spl.php). Aún así, necesita habilitar la [extensión](https://www.php.net/manual/en/intro.dom.php) DOM o instalarla con este comando de Linux para usarla:

```none
sudo apt-get install php-dom

```

No es necesaria ninguna otra acción. Ahora está listo para usar `DomHTMLDocument` para el análisis de HTML en PHP.

### <a></a>Paso 2: Análisis de HTML

Puede analizar la cadena HTML como se indica a continuación:

```none
$dom = DOMHTMLDocument::createFromString($html);

```

De forma equivalente, puede analizar el archivo `index.html` con:

```none
$dom = DOMHTMLDocument::createFromFile("./index.html");

```

`$dom` es un objeto [`DomHTMLDocument`](https://www.php.net/manual/en/class.dom-htmldocument.php) que expone los métodos necesarios para [el análisis sintáctico de datos](/blog/datos-web/what-is-data-parsing).

### <a></a>Paso 3: Análisis de datos

Puede seleccionar todas las entradas del equipo de hockey utilizando `DOMHTMLDocument` con el siguiente enfoque:

```none
// select each row on the page
$table = $dom->getElementsByTagName("table")->item(0);
$rows = $table->getElementsByTagName("tr");

// iterate through each row and extract data
foreach ($rows as $row) {
  $cells = $row->getElementsByTagName("td");

  // extracting the data from each column
  $team = trim($cells->item(0)->textContent);
  $year = trim($cells->item(1)->textContent);
  $wins = trim($cells->item(2)->textContent);
  $losses = trim($cells->item(3)->textContent);
  $win_pct = trim($cells->item(5)->textContent);
  $goals_for = trim($cells->item(6)->textContent);
  $goals_against = trim($cells->item(7)->textContent);
  $goal_diff = trim($cells->item(8)->textContent);

  // create an array for the scraped team data
  $team_data = [
    "team" => $team,
    "year" => $year,
    "wins" => $wins,
    "losses" => $losses,
    "win_pct" => $win_pct,
    "goals_for" => $goals_for,
    "goals_against" => $goals_against,
    "goal_diff" => $goal_diff
  ];

  // print the scraped team data
  print_r($team_data);
  print ("n");
}

```

`DOMHTMLDocument` no ofrece métodos avanzados de consulta. Así que tienes que confiar en métodos como `getElementsByTagName()` y la iteración manual.

He aquí un desglose de los métodos utilizados:

- `getElementsPorNombreDeEtiqueta()`: Recupera todos los elementos de una etiqueta dada (como `<table>`, `<tr>` o `<td>`) dentro del documento.
- `item()`: Devuelve un elemento individual de una lista de elementos devueltos por `getElementsByTagName()`.
- `contenido de texto`: Esta propiedad proporciona el contenido de texto en bruto de un elemento, lo que permite extraer los datos visibles (como el nombre del equipo, el año, etc.).

También utilizamos [`trim()`](https://www.php.net/manual/en/function.trim.php) para eliminar los espacios en blanco adicionales antes y después del contenido del texto para obtener datos más limpios.

Cuando se añade a `index.php`, el fragmento anterior producirá este resultado:

```none
Array
(
    [team] => Boston Bruins
    [year] => 1990
    [wins] => 44
    [losses] => 24
    [win_pct] => 0.55
    [goals_for] => 299
    [goals_against] => 264
    [goal_diff] => 35
)

// omitted for brevity...

Array
(
    [team] => Detroit Red Wings
    [year] => 1994
    [wins] => 33
    [losses] => 11
    [win_pct] => 0.688
    [goals_for] => 180
    [goals_against] => 117
    [goal_diff] => 63
)

```

## <a></a>Método nº 2: Uso de un analizador DOM de HTML simple

[Simple HTML DOM Parser](https://github.com/voku/simple_html_dom) es una librería PHP ligera que facilita el análisis y la manipulación de contenido HTML. La biblioteca se mantiene activamente y tiene más de 880 estrellas en GitHub.

### <a></a>Paso 1: Instalación y configuración

Puede instalar Simple HTML Dom Parser a través de Composer con este comando:

```none
composer require voku/simple_html_dom

```

También puede descargar e incluir manualmente el archivo `simple_html_dom.php` en su proyecto.

Luego, impórtalo en `index.php` con esta línea de código:

```none
use vokuhelperHtmlDomParser;

```

### <a></a>Paso 2: Análisis de HTML

Para analizar una cadena HTML, utilice el método `file_get_html()`:

```none
$dom = HtmlDomParser::str_get_html($html);

```

Para analizar `index.html`, escriba `file_get_html()` en su lugar:

```none
$dom = HtmlDomParser::file_get_html($str);

```

Esto cargará el contenido HTML en un objeto `$dom`, lo que le permitirá navegar por el DOM fácilmente.

### <a></a>Paso 3: Análisis de datos

Extraer los datos del equipo de hockey del HTML utilizando Simple HTML DOM Parser:

```none
// find all rows in the table
$rows = $dom->findMulti("table tr.team");

// loop through each row to extract the data
foreach ($rows as $row) {
  // extract data using CSS selectors
  $team_element = $row->findOne(".name");
  $team = trim($team_element->plaintext);

  $year_element = $row->findOne(".year");
  $year = trim($year_element->plaintext);

  $wins_element = $row->findOne(".wins");
  $wins = trim($wins_element->plaintext);

  $losses_element = $row->findOne(".losses");
  $losses = trim($losses_element->plaintext);

  $win_pct_element = $row->findOne(".pct");
  $win_pct = trim($win_pct_element->plaintext);

  $goals_for_element = $row->findOne(".gf");
  $goals_for = trim($goals_for_element->plaintext);

  $goals_against_element = $row->findOne(".ga");
  $goals_against = trim(string: $goals_against_element->plaintext);

  $goal_diff_element = $row->findOne(".diff");
  $goal_diff = trim(string: $goal_diff_element->plaintext);

  // create an array with the extracted team data
  $team_data = [
    "team" => $team,
    "year" => $year,
    "wins" => $wins,
    "losses" => $losses,
    "win_pct" => $win_pct,
    "goals_for" => $goals_for,
    "goals_against" => $goals_against,
    "goal_diff" => $goal_diff
  ];

  // print the scraped team data
  print_r($team_data);
  print("n");
}

```

Las características del Simple HTML DOM Parser utilizadas anteriormente son:

- `findMulti()`: Selecciona todos los elementos identificados por el selector CSS dado.
- `findOne()`: Localiza el primer elemento que coincide con el selector CSS dado.
- `texto sin formato`: Un atributo para obtener el contenido de texto sin formato dentro de un elemento HTML.

Esta vez, utilizamos selectores CSS con una lógica más completa y robusta. Aún así, el resultado será el mismo que en el enfoque inicial de PHP de análisis de HTML.

## <a></a>Método nº 3: Utilizar el componente DomCrawler de Symfony

[El componente `DomCrawler` de Symfony](https://symfony.com/doc/current/components/dom_crawler.html) proporciona una forma sencilla de analizar documentos HTML y extraer datos de ellos.

**Nota**: El componente forma parte del [framework Symfony](https://symfony.com/) pero también se puede utilizar de forma independiente, como haremos en esta sección.

### <a></a>Paso 1: Instalación y configuración

Instala el componente `DomCrawler` de Symfony con este comando de Composer:

```none
composer require symfony/dom-crawler

```

A continuación, impórtelo en el archivo `index.php`:

```none
use SymfonyComponentDomCrawlerCrawler;

```

### <a></a>Paso 2: Análisis de HTML

Para analizar una cadena HTML, cree una instancia de [`Crawler`](https://github.com/symfony/symfony/blob/7.2/src/Symfony/Component/DomCrawler/Crawler.php) con el método `html()`:

```none
$crawler = new Crawler($html);

```

Para analizar un archivo, utilice `file_get_contents()` y cree la instancia `Crawler`:

```none
$crawler = new Crawler(file_get_contents("./index.html"));

```

Las líneas anteriores cargarán el contenido HTML en el objeto `$crawler`, que proporciona métodos sencillos para recorrer y extraer datos.

### <a></a>Paso 3: Análisis de datos

Extraiga los datos del equipo de hockey utilizando el componente `DomCrawler`:

```none
// select all rows within the table
$rows = $crawler->filter("table tr.team");

// loop through each row to extract the data
$rows->each(function ($row, $i) {
  // extract data using CSS selectors
  $team_element = $row->filter(".name");
  $team = trim($team_element->text());

  $year_element = $row->filter(".year");
  $year = trim($year_element->text());

  $wins_element = $row->filter(".wins");
  $wins = trim($wins_element->text());

  $losses_element = $row->filter(".losses");
  $losses = trim($losses_element->text());

  $win_pct_element = $row->filter(".pct");
  $win_pct = trim($win_pct_element->text());

  $goals_for_element = $row->filter(".gf");
  $goals_for = trim($goals_for_element->text());

  $goals_against_element = $row->filter(".ga");
  $goals_against = trim($goals_against_element->text());

  $goal_diff_element = $row->filter(".diff");
  $goal_diff = trim($goal_diff_element->text());

  // create an array with the extracted team data
  $team_data = [
    "team" => $team,
    "year" => $year,
    "wins" => $wins,
    "losses" => $losses,
    "win_pct" => $win_pct,
    "goals_for" => $goals_for,
    "goals_against" => $goals_against,
    "goal_diff" => $goal_diff
  ];

  // print the scraped team data
  print_r($team_data);
  print ("n");
});

```

Los métodos `DomCrawler` utilizados son:

- `each()`: Para iterar sobre una lista de elementos seleccionados.
- `filter()`: Selecciona elementos basándose en selectores CSS.
- `texto()`: Extrae el contenido de texto de los elementos seleccionados.

¡Maravilloso! Ahora eres un maestro del parseo PHP HTML.

## <a></a>Análisis de HTML en PHP: Tabla comparativa

Puede comparar los tres enfoques de análisis sintáctico de HTML en PHP explorados aquí en la siguiente tabla resumen:

**Documento HTML****Analizador DOM de HTML simple****DomCrawler de Symfony****Tipo**Componente nativo PHPBiblioteca externaComponente Symfony**Estrellas de GitHub**–880+4,000+**Compatibilidad con XPath**❌✔️✔️**Selector CSS**❌✔️✔️**Curva de aprendizaje**BajoBajo a medioMedio**Simplicidad de uso**MedioAltaAlta**API**BásicoRichRich## <a></a>Conclusión

En este artículo, usted aprendió acerca de tres enfoques para el análisis sintáctico de HTML en PHP, que van desde el uso de extensiones incorporadas hasta bibliotecas de terceros.

Aunque todas estas soluciones funcionan, tenga en cuenta que la página web de destino puede utilizar JavaScript para la representación. En ese caso, los métodos simples de análisis de HTML como los presentados anteriormente no funcionarán. En su lugar, necesita un navegador de raspado completo con capacidades avanzadas de análisis de HTML como [Scraping Browser](/products/scraping-browser).

¿Quiere saltarse el análisis de HTML y obtener los datos inmediatamente? Consulte nuestros [conjuntos de datos listos para usar](/products/datasets), que abarcan cientos de sitios web.

Cree una cuenta gratuita de Bright Data hoy mismo para probar nuestras soluciones de datos y scraping con una prueba gratuita.



Contactar ventasPrueba gratuita![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Tabla de Contenidos













 [ ](https://news.ycombinator.com/submitlink?t=C%C3%B3mo+analizar+HTML+con+PHP+en+2026&u=https://brightdata.es/blog/datos-web/parse-html-with-php) [ ](https://www.linkedin.com/shareArticle?mini=true&title=C%C3%B3mo+analizar+HTML+con+PHP+en+2026&url=https://brightdata.es/blog/datos-web/parse-html-with-php) [ ](http://www.reddit.com/submit?title=C%C3%B3mo+analizar+HTML+con+PHP+en+2026&url=https://brightdata.es/blog/datos-web/parse-html-with-php)







##  Usted también puede estar interesado en

 [ ![OpenHuman with Bright Data](https://media.brightdata.es/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.es/blog/ai/openhuman-with-bright-data "Acceso Web Listo para Producción en OpenHuman a Través de la CLI de Bright Data")

 [AI



 ![Antonello Zanini](https://media.brightdata.es/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Acceso Web Listo para Producción en OpenHuman a Través de la CLI de Bright Data

Integra la CLI de Bright Data con OpenHuman para habilitar acceso web listo para producción y recopilación de datos para agentes de IA.



 09-Sep-2026

 14 min de lectura

 ](https://brightdata.es/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.es/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.es/blog/datos-web/multimodal-web-scraping-with-minimax "Scraping Web Multimodal con MiniMax")

 [Datos web



 ![Antonello Zanini](https://media.brightdata.es/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Scraping Web Multimodal con MiniMax

Combina Bright Data Web Unlocker con la visión de MiniMax M3 para extraer datos estructurados de imágenes y capturas de pantalla de páginas web.



 09-Sep-2026

 5 min de lectura

 ](https://brightdata.es/blog/datos-web/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.es/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.es/blog/ai/best-cli-tools-for-codex "Las 10 mejores herramientas CLI para Codex en 2026 – Probadas y clasificadas")

 [AI



 ![Daniel Shashko](https://media.brightdata.es/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### Las 10 mejores herramientas CLI para Codex en 2026 – Probadas y clasificadas

Las 10 herramientas CLI que hacen a Codex más rápido y capaz, comenzando con la Bright Data CLI para acceso web real desde dentro del sandbox.



 06-Sep-2026

 24 min de lectura

 ](https://brightdata.es/blog/ai/best-cli-tools-for-codex)
