1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2011
    Messages : 23
    Points : 12
    Points
    12

    Par défaut htmlagilitypack Site web

    Bonjour a tous et merci d'avance pour votre aide.

    J'ai suivie plusieurs tutoriels sur HtmlAgilityPack, mais je n'arrive pas a faire exactement ce que j'aimerais. Sur un site web de météo, je voudrais récupérer les provinces et les sites web raccrocher aux provinces (Voir PJ).

    J'arrive à récupérer les provinces (en cherchant et en faisant un peu n'importe quoi :-)) mais les sites web c'est un vrai défis.

    Pour chacune des "section", en h2 on peut trouver la province et en href (un peu plus bas) les sites web avec leurs descriptifs. Je voudrais récupérer le tout pour chacune des provinces.

    Voici ce que j'ai essayé avec plus en moins de succes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    string url = "https://meteo.gc.ca/marine/marine_bulletins_f.html";
                HtmlWeb web = new HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = web.Load(url);
     
     
                var Element = doc.DocumentNode
                                            .Element("html")
                                            .Element("body")
                                            .Element("main")
                                            .Element("section")
                                            .Element("div");
     
     
     
     
                //  / html / body / main / section[1] / div / div[3]
     
                //.Element("div");
                //.Element("section");
                //.Element("ul");
     
                var Info_Province = Element.SelectSingleNode("(//div[@class='hidden-xs'])[2]");
                var test = Info_Province.InnerHtml;
     
                // L_Province_Complet.Add(Info_Province.InnerText);
     
                /*foreach (var province in test)
                {
                    var title = province.Attributes["h2"];
     
                    if (title != null)
                    {
                        L_Province_Complet.Add(title.Value);
                    }
                }*/
                    /*var title = province.Attributes["id"];
     
                    if (title != null)
                    {
                        L_Province_Complet.Add(title.Value);
                    }*/
     
                    /*var href = province.Attributes["href"];
     
                    if (href != null)
                    {
                        L_Site_Web.Add("https://meteo.gc.ca/" + href.Value);
                    }
    Est-ce que quelqu'un pourrait m'aider avec cela ?

    Merci
    Images attachées Images attachées  

  2. #2
    Membre averti
    Inscrit en
    avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 239
    Points : 313
    Points
    313

    Par défaut

    Bonjour Gregory_007,

    En fait, il faudrait jouer sur la requête XPath qui ferait tout le travail.

    Je vous conseille pour tester et trouver la requête XPath permettant de trouver ce que vous souhaitez, d'utiliser Firefox et son plugin XPathChecker.

    Vous accédez à la page Web que vous désirez et vous faites un clic droit sur la page et vous cliquez sur "Show XPath".

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2011
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Bonjour Jcdentons,

    J'avais trouvé le Xpath avec Chrome, cela m'avait donné: /html/body/main/section[1]/div/div[3]/section[1]

    J'ai essayé de trouver avec le xpath comment faire sans pour autant trouver des exemples concrets.

    Est-ce que tu aurais une idée comment faire ? Est-ce qu'il est possible de rentrer le chemin directement du xpath pour récupérer les données du web ?

    Merci

  4. #4
    Membre averti
    Inscrit en
    avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 239
    Points : 313
    Points
    313

    Par défaut

    Cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                foreach (HtmlNode noeudSection in doc.DocumentNode.SelectNodes("/html/body/main/section/div/div/section"))
                {
                    List<string> listeLiens = new List<string>();
                    string province = noeudSection.SelectSingleNode("h2").InnerHtml;
                    foreach (HtmlNode noeudLien in noeudSection.SelectNodes("section/ul/li/a"))
                    {
                        listeLiens.Add(noeudLien.InnerHtml + " : " + noeudLien.GetAttributeValue("href", string.Empty));
                    }
                }

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2011
    Messages : 23
    Points : 12
    Points
    12

    Par défaut

    Bonjour Jcdentons,

    Wow merci pour le code. Je dois comprendre quelque chose si je veux pouvoir continuer mon code. Si je suis le chemin pour me rendre à la provinve, qu'est-ce qui spécifie dans le code que je me rend au deuxième "div" après "/html/body/main/section/div/" Voir flèche noir et jaune. Si je voudrais m'arréter à la flêche jaune, qu'est-ce qui va changer dans le code (car présentement on va à la fèche noir)?
    Nom : Untitled.png
Affichages : 15
Taille : 24,8 Ko

    Dernière question, est-ce qu'il existe une condition pour vérifier si un noeud est présent => "noeudSection.SelectNodes("section/ul/li/a")", car je viens de remarquer que pour certaine province le chemin est seulement noeudSection.SelectNodes("ul/li/a") sans "section" ?

    Avec ces réponces, je pense pouvoir finir mon code.

    Merci encore :-)

  6. #6
    Membre averti
    Inscrit en
    avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 239
    Points : 313
    Points
    313

    Par défaut

    Les réponses devraient se trouver dans ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
                HtmlNode noeudDiv = doc.DocumentNode.SelectSingleNode("/html/body/main/section/div/div");
                // On teste que le noeud DIV principal est bien présent
                if (null != noeudDiv)
                {
                    HtmlNodeCollection listeNoeudsUl = noeudDiv.SelectNodes("ul");
                    // On teste que l'on a bien une liste de noeuds pour UL
                    if (null != listeNoeudsUl)
                    {
                        foreach (HtmlNode noeudUl in listeNoeudsUl)
                        {
                            List<string> listeLiens = new List<string>();
                            HtmlNodeCollection listeNoeudsLien = noeudUl.SelectNodes("li/a");
                            // On teste que l'on a bien une liste de noeuds Lien
                            if (null != listeNoeudsLien)
                            {
                                foreach (HtmlNode noeudLien in listeNoeudsLien)
                                {
                                    listeLiens.Add(noeudLien.InnerHtml + " : " + 
                                        //Si l'attribut href n'est pas trouvé, la valeur par défaut sera la chaine vide.
                                        noeudLien.GetAttributeValue("href", String.Empty));
                                }
                            }
                        }
                    }
                }

  7. #7
    Membre expérimenté
    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, AMP)
    Inscrit en
    juillet 2014
    Messages
    916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, AMP)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 916
    Points : 1 640
    Points
    1 640

    Par défaut

    Cette discutions est elle résolue ?

Discussions similaires

  1. Créer un site web - en quel langage ?
    Par Thierry92 dans le forum Débuter
    Réponses: 90
    Dernier message: 13/04/2015, 14h42
  2. Avec quel éditeur concevez-vous vos site web ?
    Par Marc-xhtml dans le forum Outils
    Réponses: 263
    Dernier message: 06/05/2009, 14h43
  3. [Logiciel]Synchroniseur de site web
    Par magic corp. dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 12/05/2004, 12h05
  4. Réponses: 2
    Dernier message: 08/11/2003, 23h42
  5. site web sur le Haskell
    Par ab_sam dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 30/09/2003, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo