utiliser HtmlAgilityPack pour analyser une page Web en C #

c# html html-agility-pack

Question

J'essaie d'utiliser HtmlAgilityPack pour analyser les informations d'une page Web. Ceci est mon code:

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"
            }               
        }
    }
}

Mais lorsque j'ai essayé d'accéder à doc.DocumentElement.SelectNodes je ne peux pas voir DocumentElement dans la liste. J'ai ajouté le HtmlAgilityPack.dll dans les références, mais je ne sais pas quel est le problème.

Réponse acceptée

J'ai un article qui montre comment gratter des éléments DOM avec HAP (HTML Agility Pack) en utilisant ASP.NET. Il vous permet simplement de suivre tout le processus étape par étape. Vous pouvez jeter un coup d'œil et l'essayer.

Suppression d'éléments DOM HTML à l'aide de HtmlAgilityPack (HAP) dans ASP.NET

et à propos de votre processus cela fonctionne bien pour moi. J'ai essayé de cette façon, comme vous l'avez fait avec un seul changement.

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;
}

Vous avez la sortie comme prévu. Le problème est que vous demandez un objet DocumentElement à partir de l'objet HtmlDocument , qui devrait en réalité être DocumentNode . Voici une réponse d'un développeur de HTMLAgilityPack à propos du problème auquel vous êtes confronté.

HTMLDocument.DocumentElement pas dans le navigateur d'objet


Réponse populaire

Le comportement que vous voyez est correct.

Regardez ce que vous faites réellement: http://htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs .

Vous demandez à l’élément supérieur de sélectionner des nœuds correspondant à un xpath. À moins que votre expression xpath ne commence par un // , vous lui demandez des nœuds relatifs, qui sont des nœuds descendants. Un élément de document n'est pas un descendant de lui-même, car aucun élément n'est un descendant de lui-même.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi