¿Qué es el análisis de HTML?
La API de Raspado Universal Sin Aglomeraciones recupera y renderiza el HTML de la página pública que los analizadores posteriores pueden convertir en un árbol de documento consultable.
TL;DR
- El análisis de HTML convierte el marcado en un árbol de documento. Elementos, atributos, texto y comentarios se convierten en nodos que el código puede recorrer o consultar.
- HTML utiliza sus propias reglas de manejo de errores. Los navegadores pueden construir un DOM utilizable a partir de un marcado que no estaría bien formado como XML.
- El análisis no ejecuta JavaScript en la página. Un analizador lee el marcado suministrado; puede ser necesario un tiempo de ejecución de navegador para obtener el DOM posterior a la renderización.
- Los selectores operan después del análisis. Los selectores CSS y XPath localizan nodos en el árbol; la extracción luego lee y normaliza sus valores.
El análisis de HTML es el proceso de leer la fuente HTML y construir un árbol de documento estructurado. El resultado es un Modelo de Objeto del Documento, o DOM, que contiene nodos de elementos, nodos de texto, atributos, comentarios y relaciones entre padres, hijos y hermanos.
El Estándar HTML de WHATWG define el comportamiento de tokenización y construcción de árboles para recursos de texto/html. Esas reglas explican por qué el marcado fuente y el DOM resultante están relacionados pero no siempre son idénticos.
¿Cómo funciona el análisis de HTML?
El análisis de HTML tokeniza el marcado y aplica reglas de construcción de árboles para crear un DOM.
- Leer caracteres. El analizador consume la entrada HTML como un flujo.
- Crear tokens. Las etiquetas de inicio, etiquetas de fin, texto, comentarios y declaraciones de doctype se convierten en tokens.
- Construir el árbol. Los modos de inserción y las reglas de elementos abiertos deciden dónde pertenece cada token.
- Corregir el marcado recuperable. El analizador puede implicar elementos, cerrar elementos abiertos o reubicar nodos de acuerdo con el estándar.
- Exponer el DOM. El código puede recorrer los nodos resultantes o consultarlos con API de selección compatibles.
Análisis de HTML vs Renderización
El análisis crea el árbol de documentos; la renderización calcula el diseño y pinta la página visual.
| Etapa | Entrada | Salida |
|---|---|---|
| Recuperación | Configuraciones de URL y solicitud | Bytes de respuesta HTTP |
| Análisis | Texto HTML | Árbol DOM |
| Ejecución de scripts | DOM y JavaScript | DOM potencialmente modificado |
| Renderización | DOM, CSS, estado de diseño | Píxeles y presentación interactiva |
| Extracción | DOM o respuesta estructurada | Registros seleccionados |
Guía de la canalización de navegadores de MDN describe la tokenización, la construcción de árboles y la interacción entre el análisis y la bloqueo de scripts.
Para cadenas en memoria, DOMParser.parseFromString() muestra la forma de la API del navegador para convertir el código fuente HTML o XML en un Documento.
¿Por qué importa el análisis HTML para la extracción web?
El análisis HTML proporciona a los scrapers un modelo estructural que es más seguro y preciso que buscar en el marcado bruto como texto plano.
Selección de campos
Ubique tarjetas de productos, titulares, tablas, enlaces y metadatos por estructura y atributos.
Limpieza de texto
Lea el contenido de texto sin mantener etiquetas, comentarios o marcado de navegación no relacionado.
Resolución de enlaces
Extraiga atributos href y resuelva URLs relativas contra la base del documento.
Validación de contenido
Verifique que existan los elementos requeridos y que los nodos seleccionados tengan las relaciones esperadas.
Errores comunes en el análisis HTML
La mayoría de los fallos de análisis provienen de usar la entrada incorrecta, asumir reglas XML o acoplar la extracción a detalles frágiles del diseño.
- Analizando la respuesta inicial cuando los datos aparecen más tarde. Inspeccione el DOM renderizado o la respuesta estructurada de red cuando JavaScript crea el contenido.
- Tratar HTML como XML bien formado. Use un analizador HTML para text/html porque HTML tiene diferentes reglas de corrección.
- Buscar marcado con expresiones regulares amplias. Analice el árbol, luego seleccione nodos por estructura y atributos estables.
- Asumir que cada página tiene cada módulo. Modelar elementos opcionales como anulables y validar tipos de página antes de la extracción.
¿Qué sucede durante la tokenización?
La tokenización lee el flujo de caracteres de entrada y reconoce construcciones como etiquetas de inicio, etiquetas de cierre, datos de caracteres, comentarios y el tipo de documento. El tokenizador mantiene el estado porque los mismos caracteres pueden significar diferentes cosas en texto normal, valores de atributos, comentarios, elementos de texto sin procesar o datos de scripts.
Las referencias de caracteres se resuelven de acuerdo con las reglas HTML, los atributos se adjuntan a los tokens de etiquetas y los errores de análisis se manejan sin necesariamente detener el documento. Este comportamiento es una razón por la cual un analizador HTML es preferible al simple split de cadenas. Un signo menor dentro de un script o un ampersand en texto no se puede interpretar correctamente sin contexto.
La tokenización por sí sola no produce la jerarquía de elementos final. Los tokens alimentan la etapa de construcción del árbol, que decide dónde pertenecen los nodos y cómo el marcado mal formado u omitido afecta la estructura del documento.
¿Cómo corrige la construcción de árboles HTML?
La construcción de árboles utiliza modos de inserción y una pila de elementos abiertos para crear el DOM. El algoritmo puede implicar elementos faltantes, cerrar elementos cuando un nuevo token hace que la anidación previa sea inválida y manejar contextos especiales como tablas. Como resultado, el DOM puede contener nodos o relaciones que no se escribieron explícitamente en el texto fuente.
El marcado de tablas es un ejemplo común. El contenido colocado en una ubicación inválida puede moverse de acuerdo con las reglas de análisis. Los elementos de párrafo también se pueden cerrar implícitamente cuando comienzan ciertos elementos de bloque. La lógica de extracción debe inspeccionar el árbol analizado en lugar de inferir la anidación a partir de la indentación o una lectura rápida del marcado fuente.
Diferentes bibliotecas de analizadores tienen como objetivo implementar el estándar HTML, pero pueden exponer diferentes API y niveles de conformidad. Pruebe la biblioteca real con páginas mal formadas representativas si la forma exacta del árbol es importante para la canalización.
¿Cómo afectan la codificación y el tipo de contenido al análisis?
El analizador necesita la codificación de caracteres correcta para convertir bytes de respuesta en caracteres. Una codificación incorrecta puede corromper nombres, precios, puntuación y valores de atributos relevantes para el selector antes de que comience la construcción del árbol. Respete los metadatos de respuesta confiables y el comportamiento documentado de detección de codificación del analizador.
El tipo de contenido también importa. HTML y XML tienen diferentes reglas de análisis y comportamiento de errores. XML generalmente requiere entrada bien formada y procesamiento consciente del espacio de nombres, mientras que HTML define un comportamiento de recuperación para errores comunes de marcado. Alimentar text/html a un analizador XML puede rechazar una página que los navegadores muestran, mientras que alimentar XML a un analizador HTML puede perder semánticas de espacio de nombres o de caso.
Registre el tipo de contenido final de la respuesta y la URL junto con la captura. Una URL de página nominal puede devolver JSON, una descarga, una página de acceso u otro formato según el contexto de la solicitud. Seleccione el analizador solo después de verificar qué devolvió realmente el servicio.
¿Cómo interactúan los scripts con el analizador?
En un navegador, ciertos elementos de script pueden pausar el análisis HTML mientras se obtienen y ejecutan códigos. Ese código puede inspeccionar el DOM parcialmente construido, escribir marcado adicional o programar cambios posteriores. Otros scripts se cargan sin bloquear de la misma manera y pueden actualizar la página después de que el análisis inicial se complete.
Un analizador independiente no reproduce el ciclo de vida de la aplicación simplemente construyendo el árbol inicial. Si los datos requeridos son insertados por scripts, el flujo de trabajo de extracción necesita un navegador o una respuesta estructurada que contenga la misma información. La entrada correcta puede ser el DOM renderizado, pero también puede ser una respuesta API observada durante el renderizado.
Elija una condición de finalización vinculada al contenido de destino. La carga del documento por sí sola puede ocurrir antes de que una aplicación cliente termine su solicitud de datos, mientras que el tráfico continuo de análisis puede hacer que las condiciones de inactividad en la red sean inapropiadas. Un elemento, respuesta o estado de aplicación asociado con el módulo requerido es más significativo.
¿Cómo pruebas un analizador HTML para extracción?
Las pruebas de analizador deben incluir marcado válido, etiquetas omitidas, anidamiento no válido, entidades, comentarios, tablas, scripts, texto no ASCII y documentos vacíos. Compare el árbol resultante con el comportamiento requerido por las reglas de extracción en lugar de solo probar si el análisis se realiza sin una excepción.
Las pruebas de extracción deben operar en el árbol analizado y afirmar los límites de los registros, el texto de los campos, los atributos y los módulos opcionales. Incluir páginas cuyo origen y DOM difieran para que el equipo sepa si una regla espera HTML del servidor o HTML renderizado.
Cuando cambia una versión de parser o biblioteca, vuelve a ejecutar el corpus representativo. Una pequeña diferencia en la corrección del árbol, la normalización del texto o el soporte de selectores puede cambiar los registros extraídos. Versiona el parseo y la pila de extracción junto con el esquema para que la fuente de un cambio siga siendo rastreable.
Conclusión
El parseo de HTML convierte el marcado en el DOM que los navegadores y las herramientas de extracción pueden consultar. La extracción confiable comienza eligiendo la entrada correcta: HTML de origen o HTML renderizado, luego usando selectores estructurales y validación de esquema en el árbol resultante.
¿Listo para construir tu flujo de trabajo de datos web?
Usa Scrapeless para recuperar contenido web público, luego aplica el patrón de descubrimiento y extracción que se ajuste a tu conjunto de datos.
Empezar gratis →FAQ
¿El parseo de HTML es lo mismo que el web scraping?
No. El parseo de HTML construye un árbol de documentos; el web scraping también incluye recuperación, selección, limpieza, validación y almacenamiento.
¿Un parser HTML ejecuta JavaScript?
Un parser HTML independiente normalmente no ejecuta JavaScript. Un entorno de ejecución de navegador puede ejecutar scripts y exponer el DOM resultante.
¿Por qué puede diferir el DOM de la fuente de la página?
El parser HTML puede corregir el marcado e implicar elementos, mientras que JavaScript puede agregar, eliminar o cambiar nodos después del parseo.
¿Se pueden usar selectores CSS sin parsear HTML?
Los selectores CSS operan en un árbol de documentos, por lo que el marcado debe ser primero parseado o suministrado a través de un entorno que ya exponga un DOM.