Obtener contenido del documento

Obtener el objeto de documento

1. Crear el objeto de documento

HtmlDocument document = new HtmlDocument();Lenguaje del código: JavaScript (javascript)

2. Dos formas de carga

1)Cargar cadena HTML

document.LoadHtml(htmlString);Lenguaje del código: JavaScript (javascript)

2)Cargar archivo HTML local (especifica codificación para evitar caracteres corruptos)

document.Load(@"c:/news.html", Encoding.UTF8);Lenguaje del código: JavaScript (javascript)

Para rutas Windows se recomienda usar @ para desactivar el escape; c://news.html del material didáctico es solo un ejemplo de sintaxis.

3. Obtener el nodo raíz

HtmlNode rootNode = document.DocumentNode;Lenguaje del código: JavaScript (javascript)

Todas las consultas XPath se ejecutan tomando rootNode como base.

Operaciones con nodos

1. Crear nuevo nodo a partir del HTML de otro nodo

HtmlNode newNode = HtmlNode.CreateNode(newsNode.OuterHtml);
  • OuterHtml: Incluye su propia etiqueta junto con todo el contenido HTML interno
  • Se usa habitualmente para copiar nodos o analizar fragmentos HTML por separado

2. Consultar nodos

  • SelectSingleNode("XPath"): Devuelve el primer nodo coincidente, tipo de retorno HtmlNode
HtmlNode childNode = itemNode.SelectSingleNode("//div[1]");Lenguaje del código: JavaScript (javascript)
  • SelectNodes("XPath"): Devuelve todos los nodos coincidentes, tipo de retorno HtmlNodeCollection

3. Leer texto y atributos

  1. Obtener texto plano contenido dentro del nodo
string text = itemNode.InnerText;
  1. Leer atributo de etiqueta (escritura básica)
string href = itemNode.Attributes["href"].Value;Lenguaje del código: JavaScript (javascript)

Riesgo: Si la etiqueta no cuenta con el atributo href, el acceso directo Attributes["href"] devuelve null y provoca errores en el código.

Escritura segura recomendada:

string href = itemNode.GetAttributeValue("href", "");Lenguaje del código: JavaScript (javascript)

4. Código completo: recorrer lista de noticias

foreach (HtmlNode item in newsList)
{
    string title = item.InnerText;
    string href = item.Attributes["href"].Value;
}Lenguaje del código: PHP (php)

Observaciones adicionales

  1. Problema de valores nulos
    SelectNodes() devuelve null cuando no encuentra nodos coincidentes, debes comprobarlo antes de hacer el recorrido foreach:
if(newsList != null)
{
    foreach(var item in newsList){ ... }
}Lenguaje del código: PHP (php)
  1. Diferencias entre InnerText / InnerHtml / OuterHtml
  • InnerText: Extrae solo texto, elimina todas las etiquetas
  • InnerHtml: HTML interno del nodo, sin su propia etiqueta
  • OuterHtml: Su propia etiqueta más todo el HTML interno
  1. Consejo rápido de XPath
    //div realiza una búsqueda global de todos los div; si omites // solo coincide con nodos hijos directos.

Ejemplo completo

using HtmlAgilityPack;
using System.Text;

//1.Inicializar documento
HtmlDocument document = new HtmlDocument();
document.Load("news.htm", Encoding.UTF8);
HtmlNode rootNode = document.DocumentNode;

//2.Consultar en lote enlaces de noticias
HtmlNodeCollection newsList = rootNode.SelectNodes(@"//div[@class='blk122']/a");

if(newsList != null)
{
    foreach (HtmlNode item in newsList)
    {
        string title = item.InnerText.Trim();
        string link = item.GetAttributeValue("href", "");
        Console.WriteLine($"Título: {title} Enlace: {link}");
    }
}Lenguaje del código: JavaScript (javascript)

Obtener contenido del documento

Deja una respuesta

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