usando HtmlAgilityPack para analizar la información de una página web en C #

c# html html-agility-pack

Pregunta

Estoy tratando de usar HtmlAgilityPack para analizar la información de una página web. Este es mi código:

using System;
using HtmlAgilityPack;

namespace htmparsing
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            string url = "https://bugs.eclipse.org";
            HtmlWeb web = new HtmlWeb();
            HtmlDocument doc = web.Load(url);
            foreach(HtmlNode node in doc){
                //do something here with "node"
            }               
        }
    }
}

Pero cuando intenté acceder a doc.DocumentElement.SelectNodes no puedo ver DocumentElement en la lista. Agregué HtmlAgilityPack.dll en las referencias, pero no sé cuál es el problema.

Respuesta aceptada

Tengo un artículo que demuestra el raspado de elementos DOM con HAP (HTML Agility Pack) usando ASP.NET. Simplemente le permite recorrer todo el proceso paso a paso. Puedes echarle un vistazo y probarlo.

Rastreo de elementos de HTML DOM usando HtmlAgilityPack (HAP) en ASP.NET

y sobre tu proceso está funcionando bien para mí. He intentado de esta manera como lo hizo con un solo cambio.

string url = "https://www.google.com";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a")) 
{
    outputLabel.Text += node.InnerHtml;
}

Consiguió la salida como se esperaba. El problema es que está solicitando DocumentElement del objeto HtmlDocument, que en realidad debería ser DocumentNode . Aquí hay una respuesta de un desarrollador de HTMLAgilityPack sobre el problema que está enfrentando.

HTMLDocument.DocumentElement no está en el navegador de objetos


Respuesta popular

El comportamiento que estás viendo es correcto.

Observe lo que realmente está haciendo: http://htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs .

Estás pidiendo al elemento superior que seleccione nodos que coincidan con alguna xpath. A menos que su expresión xpath comience con un // , le está pidiendo nodos relativos, que son nodos descendientes. Un elemento de documento no es un descendiente de sí mismo, porque ningún elemento es un descendiente de sí mismo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué