IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Extraction de données de pages web à l'aide de HTML Agility Pack [Tutoriel]


Sujet :

Dotnet

  1. #21
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Non, en fait je me suis planté, je voulais dire "framework cible", dans l'onglet Application.
    J'ai eu du mal à trouver mais j'ai ".NET Framework 4 Client Profile" sachant que dans la liste déroulante il y a aussi ".NET Framework 4" (tout court)

    C'est grave docteur ?

  2. #22
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par noftal Voir le message
    J'ai eu du mal à trouver mais j'ai ".NET Framework 4 Client Profile" sachant que dans la liste déroulante il y a aussi ".NET Framework 4" (tout court)

    C'est grave docteur ?
    Non c'est pas grave
    Le Client Profile est une version "allégée" du .NET Framework, prévue pour être un peu moins lourde à télécharger et destinée aux applis qui n'ont pas besoin du framework complet. Par exemple ça n'inclue pas System.Web (qui sert pour ASP.NET par exemple)

  3. #23
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Tiens ! Tu m'intrigues. Est-ce que par hasard System.web n'offrirait pas également des outils similaires à HAP ? En mieux ou en moins bien ? J'avoue que l'aide de VS2010 ne me parle pas encore assez vu mon niveau

  4. #24
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par noftal Voir le message
    Est-ce que par hasard System.web n'offrirait pas également des outils similaires à HAP ?
    Non. Sinon il n'y aurait pas besoin d'HAP

  5. #25
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Bonjour,

    J'ai un peu progressé depuis la dernière fois

    Maintenant, je voudrais interagir avec une page Web. C'est à dire rentrer des valeurs dans des champs imput d'un formulaire web.

    Y a-t-il un tuto pour ce faire ou bien y a-t-il des classes dans le htmlAgilityPack qui le permettent ? En relisant le tuto, je m'aperçois qu'il ne s'agit que de l'extraction de données (comme son nom l'indique)

  6. #26
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Il n'y a rien pour faire ça dans HAP à ma connaissance...

    Cela dit, ça ne servirait pas à grand chose. Je suppose que si tu veux remplir les champs d'un formulaire, c'est pour soumettre le formulaire ? Si c'est ça, inutile de passer par le HTML, tu peux directement faire la requête avec le contenu qui va bien avec WebClient.UploadValues

  7. #27
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je suppose que si tu veux remplir les champs d'un formulaire, c'est pour soumettre le formulaire ?

    Exact !
    Je vais approfondir ta piste. Sais-tu si elle permet aussi de soumettre les données saisies (simuler le clic sur un bouton Valider de la page HTML) ?

  8. #28
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par noftal Voir le message
    Exact !
    Je vais approfondir ta piste. Sais-tu si elle permet aussi de soumettre les données saisies (simuler le clic sur un bouton Valider de la page HTML) ?
    Bah si les données ont été saisies par l'utilisateur, c'est que la page est affichée dans le navigateur... donc il faudrait pouvoir interagir avec le navigateur, ce qui est déjà nettement plus compliqué (à moins que ce soit le contrôle WebBrowser dans une application, dans ce cas c'est un peu plus simple)

  9. #29
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Depuis tout à l'heure, je m'aperçois que mon formulaire de contact à remplir comporte un captcha.
    Donc je suis obligé d'afficher la page web, puis de la remplir.
    Je pense que ça va passer plutôt par le contrôle WebBrowser.
    MAis au moins, je n'ai pas à simuler le clic sur le bouton valider : c'est l'utilisateur qui s'en chargera après avoir validé le captcha.

  10. #30
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Il n'y a rien pour faire ça dans HAP à ma connaissance...

    Cela dit, ça ne servirait pas à grand chose. Je suppose que si tu veux remplir les champs d'un formulaire, c'est pour soumettre le formulaire ? Si c'est ça, inutile de passer par le HTML, tu peux directement faire la requête avec le contenu qui va bien avec WebClient.UploadValues
    Je reviens sur ton propos car je suis un peu perdu.
    J'ai réussi à interagir avec un formulaire chargé dans un System.windows.Forms.WebBrowser, dans un projet de type Winform, de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
     
            Dim docForm As System.Windows.Forms.HtmlDocument
            docForm = WebBrowser1.Document
     
            If docForm IsNot Nothing Then
                docForm.GetElementById("cfg-element-27-9").SetAttribute("value", "testNom")
                docForm.GetElementById("cfg-element-27-3").SetAttribute("value", "testEmail")
                docForm.GetElementById("cfg-element-27-4").SetAttribute("value", "testContenu")
                docForm.GetElementById("cfg-element-27-5").InvokeMember("submit")
            End If
        End Sub
    Mais cette solution affiche le formulaire web.

    Je voudrais faire la même chose mais en n'affichant pas le formulaire (et dans une classe, pas dans un projet WinForms) par analogie avec l'instruction du htmlagilitypack :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim doc As HtmlDocument
            Dim web As New HtmlWeb
     
            doc = web.Load(sURL)
    Quels objet faut-il utiliser et quelles méthodes ?

  11. #31
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Je comprends pas très bien ton histoire... S'il y a un captcha, il faut bien afficher le formulaire, non ?

  12. #32
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Ah oui, j'ai oublié de te dire que j'ai changé de fournisseur de solution Web. J'en ai trouvé un qui permet de générer un form sans captcha (je n'ai pas changé que pour cela...)

  13. #33
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Ah ok. Bah dans ce cas il suffit de repérer les noms des champs, et d'utiliser WebClient.UploadValues pour envoyer les valeurs au formulaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Using client As New WebClient
            Dim url As String = "..." ' URL définie dans le champ "action" de l'élément <form>
            Dim method As String = "POST" ' ou GET ; voir le champ "method" de l'élément <form>
     
            Dim values As New NameValueCollection()
            values.Add("cfg-element-27-9", "testNom")
            values.Add("cfg-element-27-3", "testEmail")
            values.Add("cfg-element-27-4", "testContenu")
     
            client.UploadValues(url, method, values)
    End Using

  14. #34
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Euh, on le trouve où l'élément <form> (pas dans le index.php en tout cas)
    Voici le lien du form :

  15. #35
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par noftal Voir le message
    Euh, on le trouve où l'élément <form> (pas dans le index.php en tout cas)
    Voici le lien du form :
    Ah les ch***rs... ils ont fait un formulaire sans <form>, tout est fait en Javascript
    Bah il faut regarder ce que fait la fonction de soumission en JS, et faire pareil...

  16. #36
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Suisse

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Utilisation avec xml ??
    Bonjour, je voudrais savoir si il y a la possibilité de collaborer avec un document XML et de récupérer les données tel qu'avec de l'html.
    En accédant à un site pour mon projet, je tombe sur ce 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
    <?xml version="1.0" encoding="UTF-8"?>
    <ctnSondage>
    <sondage>
    	<id>1</id>
    	<text>mon sondage</text>
    	<date>2014-11-04 06:27:03</date>
    </sondage>
     
    <sondage>
    	<id>2</id>
    	<text>teste sondage</text>
    	<date>2014-11-24 15:14:16</date>
    </sondage>
    </ctnSondage>
    Comment je pourrais le traiter ?

  17. #37
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par Dead5her Voir le message
    Bonjour, je voudrais savoir si il y a la possibilité de collaborer avec un document XML et de récupérer les données tel qu'avec de l'html.
    En accédant à un site pour mon projet, je tombe sur ce 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
    <?xml version="1.0" encoding="UTF-8"?>
    <ctnSondage>
    <sondage>
    	<id>1</id>
    	<text>mon sondage</text>
    	<date>2014-11-04 06:27:03</date>
    </sondage>
     
    <sondage>
    	<id>2</id>
    	<text>teste sondage</text>
    	<date>2014-11-24 15:14:16</date>
    </sondage>
    </ctnSondage>
    Comment je pourrais le traiter ?
    Avec un parser XML, plutôt que HTML

    Il y a tout ce qu'il faut dans .NET pour manipuler du XML ; pas besoin d'HTML Agility Pack, qui de toute façon n'est pas fait pour ça...

    Tu peux utiliser :
    - Linq to XML, qui est le plus simple pour manipuler directement le DOM
    - La sérialisation XML si tu veux mapper directement ton XML sur des objets
    - XmlDocument permet aussi de manipuler le DOM, mais c'est plus ancien et moins facile à utiliser que Linq to XML
    - XmlReader permet de lire le XML noeud par noeud (éléments, attributs, etc) de façon séquentielle. C'est difficile, peu pratique et les scénarios où c'est utile sont assez limités (ça peut servir pour lire un document XML trop gros pour être chargé en mémoire par exemple)

  18. #38
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut petite question
    Bonjour je suis assez intéresser par votre solution pour extraire du contenu web de mes page en vue de faire une documentation
    j'ai une page html
    mais je voudrais récupérer le contenu de X label avec le tool tip correspondant
    voici ma structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <label id="jform_add_search_prefix-lbl" for="jform_add_search_prefix" class="hasTooltip" title="" data-original-title="<strong>Text search of small/common words</strong><br />Enable this to be able to include small or very common words in the text search">
    	Text search of small/common words</label>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <label id="jform_loadfw_masonry-lbl" for="jform_loadfw_masonry" class="hasTooltip" title="" data-original-title="<strong>masonry</strong><br />Certaines de ces librairies peuvent être désactivées, certaines sont toujours nécessaires. Normalement vous devriez tout laisser activé ici. <br/><br/><b>NOTE:</b> Si toutefois vous choisissez d'en charger certaines manuellement depuis le frontend, alors vous devriez vous assurer qu'elles sont bien chargées via une extension tierce, par exemple dans votre template Joomla. <br/><br/><b>NOTE:</b> si vous ne chargez pas les Frameworks nécessaires le comportement ou l'apparence de vos formulaires de frontend (principalement le formulaire de soumission de contenu) seront endommagés.">masonry</label>
    comment faire pour récupérer le label et le data-original-title (en gardant les correspondances)
    Merci d'avance

  19. #39
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par micker Voir le message
    Bonjour je suis assez intéresser par votre solution pour extraire du contenu web de mes page en vue de faire une documentation
    Un truc m'échappe... si c'est tes pages, tu dois déjà avoir les données à partir desquelles elles sont générées, non ? (à moins que ce soit des pages statiques écrites à la main?)

    Si tu connais l'id du label tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var label = doc.GetElementById("jform_add_search_prefix-lbl");
    string tooltip = label.GetAttributeValue("data-original-title", "");
    string labelText = label.InnerText;

  20. #40
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Points : 49
    Points
    49
    Par défaut
    en fait le soucis c'est que les données sont dans des fichiers langues un peu mélangé ...
    l'idée serait d'avoir une fonction globale car les id des label change suivant les pages
    j'ai une 50ene de page a scannée => je voudrais recueper toutes les infos par page
    tu comprends ?

Discussions similaires

  1. Extraction données javascript page web
    Par bougnbie dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/01/2013, 13h59
  2. Création d'une page Web à l'aide du HTML
    Par Mouhsine2009 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/01/2009, 11h48
  3. Extraction de texte de pages web?
    Par VinnieMc dans le forum Web
    Réponses: 4
    Dernier message: 01/03/2006, 19h42
  4. [VB]stocker des données de pages web dans une base
    Par tofito dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/02/2006, 11h02

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