En este tutorial, examinaremos cómo el analizador DOM de PHP simple HTML se compara con el poderoso FriendsOfPHP Goutte. En los primeros días, el analizador de DOM de PHP simple HTML era todo lo que teníamos para trabajar con respecto a la extracción de datos de HTML. Ahora que tenemos FriendsOfPHP Goutte, hay una forma más rica en funciones de hacer este tipo de trabajo. Antes de comenzar, deberá configurar algunas cosas para que PHP Simple HTML DOM Parser, FriendsOfPHP Goutte y Guzzle PHP HTTP estén en funcionamiento. Esto es muy fácil de hacer gracias a Composer. Cree un directorio en su computadora llamado guzzle. CD en ese directorio y colóquelo composer.jsonen él.

Ejecute composer installyo composer updatedesde la línea de comando. Todo se configurará para ti. Ahora puede simplemente colocar un index.phparchivo directamente y probar cualquiera de los códigos que discutimos en este tutorial. Su texto estándar en el index.php se verá algo así, asegúrese de no olvidar solicitar el archivo de carga automática que el compositor crea para usted.

Lo configuramos para que no obtenga ningún error como "error 60 de cURL: problema de certificado SSL: no se puede obtener el certificado del emisor local". Si no configura su cliente como se indicó anteriormente, ¡puede recibir estos errores!


Obtener elementos HTML


Obtener elementos HTML (analizador DOM de PHP simple HTML)

Cuando comienzas con PHP Simple HTML DOM Parser, te harán hacer algo como esto. En este caso, almacena algo de HTML en una variable, luego encuentra el valor del atributo src de todas las etiquetas de imagen, junto con el valor de todos los atributos href de cualquier enlace en la página.

Obtener elementos HTML (FriendsOfPHP Goutte)

Como vemos arriba, PHP Simple HTML DOM Parser Library hace uso de un find()método, mientras que en FriendsOfPHP Goutte normalmente utilizará un filter()método para encontrar elementos en el DOM. Aquí están las firmas de funciones para ambos métodos.

find(string $ selector [, int $ index] El )
tipo de retorno puede variar.
Busque elementos mediante el selector de CSS. Devuelve el objeto de elemento Nth si se establece el índice ; de lo contrario, devuelve una matriz de objetos.
filter(string $ selector )
Siempre devuelve una instancia pública de Crawler.
Filtra la lista de nodos con un selector de CSS.

nota: El método find () varía según lo que le devuelve en función de los parámetros que le pasa. A veces, esto puede generar confusión. Por otro lado, el método filter () siempre devuelve una instancia de Symfony Crawler.


Modificar elementos HTML


Modificar elementos HTML (analizador DOM de HTML simple de PHP)

Modificar elementos HTML (FriendsOfPHP Goutte)

FriendsOfPHP Goutte en realidad recomienda no modificar el DOM con su software.

Si bien es posible, el componente DomCrawler no está diseñado para la manipulación del DOM o para volver a descargar HTML / XML.

Por lo tanto, no intentaremos modificar el DOM, pero así es como buscaría el título como se indicó anteriormente con Goutte.


Extraer contenido de HTML

Extraer contenido de HTML (PHP Simple HTML DOM Parser)

Extraer contenido de HTML (FriendsOfPHP Goutte)

Resultado de cada prueba.
probando goutte con httpbin
Cosas bastante sencillas aquí. Como podemos ver, las versiones de FriendsOfPHP Goutte suelen ser un poco más modernas y elegantes en su sintaxis gracias al uso de su función each () que hace que sea realmente fácil iterar sobre cada elemento con una función anónima.


Cómo encontrar elementos HTML

Realmente, el pan y la mantequilla de cómo funcionan estas bibliotecas es a través de su capacidad para obtener elementos del DOM utilizando selectores CSS estándar Aquí probamos casi todos los selectores de CSS disponibles, excepto los que solo tienen sentido en el contexto de un navegador web real. Si no ve un selector en particular en esta tabla, significa que no funciona en ninguna de las bibliotecas. Al probar todos estos selectores, encontramos que Goutte tiene un conjunto de opciones de selección de CSS más grande y rico en funciones. Puede hacer uso de esta lista de referencia de selectores CSS que funcionan con Goutte y Simple HTML DOM.

Prueba del selector de CSS en el filter()método de 1. Goutte y el find()método de 2. Analizador de dominios HTML simple

Formato de selectorEjemploDescripción de ejemplo12
clase.bashSelecciona todos los elementos con class = "bash"sisi
id#manpageSelecciona el elemento con id = "manpage"sisi
**Selecciona todos los elementossisi
elementoliSelecciona todos los elementos <li>sisi
elemento, elementoa, h1Selecciona todos los elementos <a> y todos los elementos <h1>sisi
elemento elementoli aSelecciona todos los elementos <a> dentro de los elementos <li>sisi
elemento > elemento> aSelecciona todos los elementos <a> donde el padre es un elemento <p>sisi
elemento + elementodiv + h1Selecciona todos los elementos <h1> que se colocan inmediatamente después de los elementos <div>sisi
elemento1 ~ elemento2~ h2Selecciona todos los elementos <h2> que están precedidos por un elemento <p>siNo
atributo ][href]Selecciona todos los elementos con un atributo hrefsisi
atributo = valor ][data-bare-link=true]Selecciona todos los elementos con data-bare-link = "true"sisi
atributo ~ = valor ][alt~=Fork]Selecciona todos los elementos con un atributo href que contiene la palabra "Bifurcación"siNo
atributo | = valor ][id|=\-curl]Selecciona todos los elementos con un valor de atributo de id que comienza con "-curl"siNo
atributo ^ = valor ]a[href^="https"]Selecciona todos los elementos <a> cuyo valor de atributo href comience con "https"sisi
atributo $ = valor ]a[href$=".org"]Selecciona todos los elementos <a> cuyo valor de atributo href termine en ".org"sisi
atributo * = valor ]a[href*="bin"]Selecciona cada elemento <a> cuyo valor de atributo href contiene la subcadena
"bin"
sisi
:comprobadoinput:checkedSelecciona cada elemento <input> marcadosiNo
:discapacitadoinput:disabledSelecciona todos los elementos <input> desactivadossiNo
:vacíodiv:emptySelecciona todos los elementos <div> que no tienen hijos (incluidos los nodos de texto)siNo
: habilitadoinput:enabledSelecciona cada elemento <input> habilitado (simplemente significa uno que no tiene un atributo deshabilitado)siNo
:primer hijoli:first-childSelecciona cada elemento <li> que es el primer hijo de su padresiNo
: primero de tipop:first-of-typeSelecciona cada elemento <p> que es el primer elemento <p> de su padresiNo
: lang ( idioma )p:lang(en)Selecciona todos los elementos <p> con un atributo lang igual a "en"siNo
:último niñoli:last-childSelecciona cada elemento <li> que sea el último hijo de su padresiNo
: último de tipoli:last-of-typeSelecciona cada elemento <li> que es el último elemento <li> de su padresiNo
: no ( selector ):not(div)Selecciona cada elemento que no es un elemento <div>siNo
: enésimo hijo ( n )span:nth-child(2)Selecciona cada elemento <span> que es el segundo hijo de su padresiNo
: enésimo último hijo ( n )span:nth-last-child(2)Selecciona cada elemento <span> que es el segundo hijo de su padre, contando
desde el último hijo
siNo
: enésimo último de tipo ( n )span:nth-last-of-type(2)Selecciona cada elemento <span> que es el segundo elemento <span> de su padre, contando
desde el último hijo
siNo
: enésimo de tipo ( n )span:nth-of-type(1)Selecciona cada elemento <span> que es el primer elemento <span> de su padresiNo
:hijo únicospan:only-childSelecciona cada elemento <span> que es el único hijo de su padresiNo
:raíz:rootSelecciona el elemento raíz del documento.siNo