Aplicación práctica

I. Preparación del entorno

1. Formas de referencia

Hay dos alternativas principales:

  1. Método antiguo: importar manualmente HtmlAgilityPack.dll
  2. Método recomendado: instalar mediante el paquete NuGet
Install-Package HtmlAgilityPack
2. Clases más usadas
Nombre de la claseFunción
HtmlDocumentContenedor del documento HTML, se encarga de cargar el código fuente HTML
HtmlWebClase para peticiones de red, obtiene el HTML de una URL directamente
HtmlNodeNodo DOM HTML individual (etiquetas div/a/p y demás)
HtmlNodeCollectionColecció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
  1. 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)
  1. 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, retorna HtmlNode
  • SelectNodes("XPath"):devuelve todos los nodos que cumplen la condición, retorna HtmlNodeCollection
  • 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 interno
  • GetAttributeValue("NombreAtributo","ValorPorDefecto"):lectura segura de atributos de etiqueta

Aplicación práctica

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *