Html agility pack aide

c# html-agility-pack

Question

J'essaie d'extraire des informations d'un site Web, mais je ne parviens pas à trouver une solution qui fonctionne pour moi. Chaque code que j'ai lu sur Internet génère au moins une erreur pour moi.

Même l'exemple de code sur leur page d'accueil génère des erreurs pour moi.

Mon code:

         HtmlDocument doc = new HtmlDocument();
         doc.Load("https://www.flashback.org/u479804");
         foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
         {
            HtmlAttribute att = link["href"];
            att.Value = FixLink(att);
         }
         doc.Save("file.htm");

Génère l'erreur suivante:

'HtmlDocument' est une référence ambiguë entre 'System.Windows.Forms.HtmlDocument' et 'HtmlAgilityPack.HtmlDocument' C: * \ Form1.cs

Edit: Tout mon code se trouve ici: http://beta.yapaste.com/55

Toute aide est très appréciée!

Réponse acceptée

Utilisez HtmlAgilityPack.HtmlDocument :

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

Le compilateur est en train de devenir confus, car deux des espaces de noms importés à l' using contiennent des classes appelées HtmlDocument , l'espace de noms HTML Agility Pack et l'espace de noms Windows Forms. Vous pouvez contourner ce problème en spécifiant la classe que vous souhaitez utiliser explicitement.


Réponse populaire

Voici comment j'ai réalisé. Notez qu’une erreur de code est donnée dans l’exemple principal d’ agility HTML dans la ligne doc.documentElement.SelectNodes ("// a [@href"]). Le correct et testé est donné ci-dessous.

 HtmlWeb hw = new HtmlWeb();

    HtmlDocument doc = hw.Load(@"http://tipscow.com");
    StringBuilder sb = new StringBuilder();

    List<string> lstHref = new List<string>();

    foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]").Distinct())
    {
        string curHref = link.Attributes["href"].Value;

        if(!lstHref.Contains(curHref))
        lstHref.Add(curHref);

    }
    foreach (string str in lstHref)
    {
        sb.Append(str +"<br />");
    }

    Response.Write (sb.ToString());

Depuis que cela a fonctionné pour moi, j'ai pensé que je devrais partager.




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