HtmlAgilityPack - Extraire les liens d'un tableau spécifique

.net c# html-agility-pack

Question

J'ai du mal à trouver le moyen exact d'analyser les liens d'un site. En utilisant firebug , le xPath exact de la table est:

/html/body/div/form/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[1]/td/div/table/tbody/tr[3]/td/div/table/tbody/tr/td/div/table

Il a également un id = 'ctl00_cp1_GridView1' (ce qui n’a pas été vraiment utile).

Tout ce que je veux faire est de trouver tous les liens dans le premier et de les ajouter à une liste.

Voici mon extrait de code actuel (avec l'aide de ce post :

protected void btnSubmitURL_Click(object sender, EventArgs e)
{
    try
    {
        List<string> siteList = new List<string>();
        int counter = 1;

        var web = new HtmlWeb();
        var doc = web.Load(txtURL.Text);
        var table = doc.DocumentNode.SelectSingleNode("html/body/div/form/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[1]/td/div/table/tbody/tr[3]/td/div/table/tbody/tr/td/div/table[@id='ctl00_cp1_GridView1']/tbody");
        HtmlNodeCollection rows = table.SelectNodes("./tr");
        if (rows != null)
        {
            for (int i = 0; i < rows.Count; i++)
            {
                HtmlNodeCollection cols = rows[i].SelectNodes("./td[1]");
                if (cols != null)
                {
                    for (int j = 0; j < cols.Count; j++)
                    {
                        HtmlNode aTags = cols[i].SelectSingleNode("./a[@id='NormalColoredFont']");
                        if (aTags != null)
                        {
                            siteList.Add(counter + ". " + aTags.InnerHtml + " - " + aTags.Attributes["href"].Value);
                        }
                    }
                }
            }
        }

        lblOutput.Text = siteList.Count.ToString();
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

Je continue à recevoir une erreur Null Exception sur les lignes HtmlNodeCollection car il ne trouve pas cette table spécifique. J'ai essayé de chercher via l'identifiant de table mais cela n'a pas aidé non plus.

Toute aide pour se rendre à cette table serait appréciée.

Réponse acceptée

J'ai finalement pu extraire tous les liens en utilisant l'exemple de Scott Mitchell . Son exemple est comme suit:

var linksOnPage = from lnks in document.DocumentNode.Descendants()
              where lnks.Name == "a" && 
                   lnks.Attributes["href"] != null && 
                   lnks.InnerText.Trim().Length > 0
              select new
              {
                 Url = lnks.Attributes["href"].Value,
                 Text = lnks.InnerText
              };

Merci à jessehouwing et à casperOne d’avoir répondu rapidement!



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow