I. Preparación del entorno
1. Formas de referencia
Hay dos alternativas principales:
- Método antiguo: importar manualmente
HtmlAgilityPack.dll - Método recomendado: instalar mediante el paquete NuGet
Install-Package HtmlAgilityPack
2. Clases más usadas
| Nombre de la clase | Función |
|---|---|
HtmlDocument | Contenedor del documento HTML, se encarga de cargar el código fuente HTML |
HtmlWeb | Clase para peticiones de red, obtiene el HTML de una URL directamente |
HtmlNode | Nodo DOM HTML individual (etiquetas div/a/p y demás) |
HtmlNodeCollection | Colección de HtmlNode, almacena múltiples resultados de consulta |
II. Dos formas de cargar HTML
En ambos casos obtendremos un objeto HtmlDocument
1: Cargar archivo local / cadena de texto HTML
- Cargar archivo HTML local
using HtmlAgilityPack;
using System.Text;
HtmlDocument document = new HtmlDocument();
// Cargar archivo local indicando la codificación
document.Load("news.htm", Encoding.UTF8);Lenguaje del código: JavaScript (javascript)
- Cargar cadena de texto HTML
string htmlStr = "<html>...</html>";
document.LoadHtml(htmlStr);Lenguaje del código: HTML, XML (xml)
2: Cargar página web desde internet
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://example.com");Lenguaje del código: JavaScript (javascript)
III. Consulta de nodos
// 1. Crear objeto de documento
HtmlDocument document = new HtmlDocument();
// 2. Leer archivo html local
document.Load("news.htm", Encoding.UTF8);
// 3. Obtener nodo raíz del documento
HtmlNode rootNode = document.DocumentNode;
// 4. Consultar varios nodos con XPath, devuelve colección de nodos
HtmlNodeCollection newsList = rootNode.SelectNodes(
@"//html/body/div[@class='content']/div/div[@class='left']/div[1]/div[@class='blk12']/div[@class='blk122']/a"
);Lenguaje del código: JavaScript (javascript)
Explicación de métodos principales
SelectSingleNode("XPath"):devuelve el primer nodo que cumple la condición, retornaHtmlNodeSelectNodes("XPath"):devuelve todos los nodos que cumplen la condición, retornaHtmlNodeCollection- Los materiales de formación usan rutas absolutas completas. En proyectos reales es mejor usar la búsqueda relativa global para simplificar XPath y reducir fallos por modificaciones en la página:
//div[@class='blk122']/aLenguaje del código: JSON / JSON con comentarios (json)
IV. Ejemplo: recorrer y extraer contenidos
if(newsList != null)
{
foreach(HtmlNode aNode in newsList)
{
string title = aNode.InnerText; // Obtener texto dentro de la etiqueta
string link = aNode.GetAttributeValue("href",""); // Leer atributo href
}
}Lenguaje del código: PHP (php)
V. Referencia rápida de propiedades importantes
.InnerText:texto plano dentro de la etiqueta.InnerHtml:código HTML interno incluyendo etiquetas hijas.OuterHtml:la propia etiqueta más todo el HTML internoGetAttributeValue("NombreAtributo","ValorPorDefecto"):lectura segura de atributos de etiqueta
Aplicación práctica
Previous: XPath