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. #1
    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 749
    Points
    39 749
    Par défaut Extraction de données de pages web à l'aide de HTML Agility Pack
    Bonjour,

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

    Il est souvent utile de récupérer automatiquement des données à partir d'une page web, en analysant le code HTML de la page pour extraire les informations qui nous intéressent. Si on n'utilise pas les outils adéquats, écrire du code pour faire ce genre de chose peut vite devenir fastidieux... Ce tutoriel présente un outil très facile à utiliser pour extraire des données d'une page web : HTML Agility Pack
    Lire l'article

    N'hésitez pas à noter et commenter l'article dans cette discussion

  2. #2
    Membre confirmé

    Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2004
    Messages : 178
    Points : 645
    Points
    645
    Par défaut
    Salut,

    C'est excellent je ne connaissais pas du tout cette bibliothèque !

    J'en comprends tout l'intérêt car pour un projet perso, j'ai été amené à faire ce genre de traitement. Et je suis tombé dans le cas numéro 1 , à partir d'un webClient et de recherches fastidieuses dans le flux string Html.

    C'est beaucoup plus souple de cette façon !

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 154
    Points
    154
    Par défaut
    En php j'utilise phpQuery.
    je teste le code jQuery dans la console js et je le copie tout simplement.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Très bon article, mais je pense qu'il aurait été utile de mentionner fizzler qui est une surcouche de AgilityPAck et permet d'utiliser des sélecteurs css au lieu de xsl: http://code.google.com/p/fizzler/

  5. #5
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par mermich Voir le message
    Salut,

    Très bon article, mais je pense qu'il aurait été utile de mentionner fizzler qui est une surcouche de AgilityPAck et permet d'utiliser des sélecteurs css au lieu de xsl: http://code.google.com/p/fizzler/
    Salut,

    Je ne l'ai pas mentionné tout simplement parce que je ne connaissais pas... effectivement ça a l'air sympa ! Par contre c'est encore en beta...

  6. #6
    Membre régulier Avatar de poincare
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Web scraping facile avec Ada et AWS
    Le framework client Ada Web server (AWS) permet le web scraping très facilement :
    exemple http://rosettacode.org/wiki/Web_scraping#Ada

  7. #7
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par poincare Voir le message
    Le framework client Ada Web server (AWS) permet le web scraping très facilement :
    exemple http://rosettacode.org/wiki/Web_scraping#Ada
    Je n'ai pas l'impression que ça ait grand chose à voir... dans le code que tu indiques, AWS sert juste à récupérer le contenu de la page, pas à analyser le contenu. La lecture du HTML se fait ligne par ligne, sans tenir compte de la structure du DOM.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci pour ce tutoriel, sympas et efficace. L'article stipule à la fin qu'il est possible de modifier des pages html, a tout hasard serait-il également possible de ce s'identifier sur un site web via cette librairie ?

  9. #9
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par umiak Voir le message
    a tout hasard serait-il également possible de ce s'identifier sur un site web via cette librairie ?
    Oui c'est possible, mais ça dépend du type d'authentification utilisé sur le site. Si c'est de l'authentification "Basic", il y a une surcharge de la méthode HtmlWeb.Load qui permet d'indiquer le user/password.
    Si c'est basé sur un formulaire et des cookies, ce sera peut-être un peu plus complexe. Il faudra d'abord poster le user/password pour s'identifier avec HttpWebRequest et récupérer les cookies, puis renvoyer les cookies à chaque requête. A priori ce n'est pas faisable directement avec la classe HtmlWeb, mais rien n'empêche de faire les requêtes avec HttpWebRequest et de parser le résultat avec Html Agility Pack. Il suffit d'utiliser la méthode Load qui prend un Stream en paramètre dans la classe HtmlDocument.

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

    Je suis débutant sur Visual Studio 2010 Express.

    Au 1.2 vous écrivez : "Dans l'explorateur de solution faites un clic droit sur le nœud Références de votre projet, et choisissez Ajouter une référence"


    Comment fait-on pour faire apparaître le noeud Référence sur un projet dans l'explorateur de solutions ?

    Le lien download de HAP du site http://htmlagilitypack.codeplex.com/ ne fonctionne pas chez moi.

    Peut-on installer HAP sans Nuget dans la mesure où Nuget n'est pas disponible pour la version Express de Visual Studio :

    http://www.developpez.net/forums/d11...t/#post7431310

  11. #11
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noftal Voir le message
    Comment fait-on pour faire apparaître le noeud Référence sur un projet dans l'explorateur de solutions ?
    Normalement il est toujours là... Sinon, clic droit sur le projet lui-même, "Ajouter une référence"

    Citation Envoyé par noftal Voir le message
    Le lien download de HAP du site http://htmlagilitypack.codeplex.com/ ne fonctionne pas chez moi.
    Bizarre, je viens de tester et ça fonctionne bien pour moi.
    Je te le mets en PJ du message au cas où tu n'arrives pas à le télécharger


    Citation Envoyé par noftal Voir le message
    Peut-on installer HAP sans Nuget dans la mesure où Nuget n'est pas disponible pour la version Express de Visual Studio
    Oui, en l'installant manuellement comme j'ai expliqué
    Fichiers attachés Fichiers attachés

  12. #12
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Merci pour le fichier.
    Le Zip contient plusieurs répertoires. Dans quel répertoire faut-il choisr le fichier DLL sachant qu'il y en a un dans chaque répertoire ?

    Nota : je suis sous Win7 64 bits

  13. #13
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noftal Voir le message
    Merci pour le fichier.
    Le Zip contient plusieurs répertoires. Dans quel répertoire faut-il choisr le fichier DLL sachant qu'il y en a un dans chaque répertoire ?

    Nota : je suis sous Win7 64 bits
    Ca dépend du type d'application. Si c'est une appli Windows Forms, WPF ou ASP.NET, choisis "Net40".

  14. #14
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Là, dans l'immédiat c'est pour un simple code dans un module.
    Mais plus généralement, où trouve-t-on la correspondance entre l'application et le répertoire où piocher le DLL ?

  15. #15
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noftal Voir le message
    Là, dans l'immédiat c'est pour un simple code dans un module.
    Mais plus généralement, où trouve-t-on la correspondance entre l'application et le répertoire où piocher le DLL ?
    Quand c'est NetXX, c'est le .NET framework "complet", avec XX qui représente la version
    SL = Silverlight
    WP = Windows Phone

    Regarde la plateforme cible dans les propriétés de ton projet, mais si tu ne sais pas, c'est probablement .NET 4

  16. #16
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Dans les propriétés du projet, onglet Compiler et Déboguer, il y a un champ "Plateforme" qui est sur "(x86) active" et c'est le seul choix possible.
    C'est bien de ce champ là que tu parles ?
    Et si oui, que dois-je en déduire ?

  17. #17
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noftal Voir le message
    Dans les propriétés du projet, onglet Compiler et Déboguer, il y a un champ "Plateforme" qui est sur "(x86) active" et c'est le seul choix possible.
    C'est bien de ce champ là que tu parles ?
    Et si oui, que dois-je en déduire ?
    Non, en fait je me suis planté, je voulais dire "framework cible", dans l'onglet Application.

  18. #18
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Je vais vérifier cela. En attendant, j'ai tenté avec N40 et ça semble marcher pour mon exemple présent.
    Du coup, j'ai quelques questions découlant du tuto lui-même.
    - quel est le type des objets Elements et SelectNodes ?
    - Quand on a récupéré des objets dans avec un objet pointant vers plusieurs éléments (comme avec Elements ou SelectNodes) et que l'on veut récupérer seulement un des éléments, quelle est la meilleure méthode pour y aller (si cet élément n'a pas d'élément distinctif comme un attribut permettant de pointer directement dessus).
    - Y a-t-il un moyen de récupérer un fichier d'aide qui permettrait d'avoir le détail de la syntaxe propre à HAP en tapant F1 comme on le fait sur VB.NET habituellement ?

    Certaines questions peuvent te paraître naïves, mais je suis débutant sur VB.NET et je suis encore plus ignare sur C#, langage que tu utilises dans tes exemples. Donc j'ai du mal à traduire en VB.NET ton dernier exemple, d'où les 2 premières questions.

  19. #19
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par noftal Voir le message
    - quel est le type des objets Elements et SelectNodes ?
    Voilà les signatures des méthodes en question, traduites en VB :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Elements(ByVal name As String) As IEnumerable(Of HtmlNode)
    Public SelectNodes(ByVal xpath As String) As HtmlNodeCollection

    Les deux sont des collections de HtmlNode, la différence c'est que IEnumerable(Of HtmlNode) peut ne pas encore être matérialisée au moment où tu la récupères. C'est une sorte de "lazy loading" : la collection est générée au fur et à mesure que tu l'énumères.

    Citation Envoyé par noftal Voir le message
    - Quand on a récupéré des objets dans avec un objet pointant vers plusieurs éléments (comme avec Elements ou SelectNodes) et que l'on veut récupérer seulement un des éléments, quelle est la meilleure méthode pour y aller (si cet élément n'a pas d'élément distinctif comme un attribut permettant de pointer directement dessus).
    Les méthodes de Linq permettent de faire ça facilement :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim elems = node.Elements("test")
    Dim first = elems.First() ' Premier élément (attention, plante si elems est vide)
    Dim first2 = elems.FirstOrDefault() ' Premier élément, ou Nothing si elems est vide
    Dim e2 = elems.ElementAt(2) ' Element à l'index 2
    Dim last = elems.Last() ' Dernier élement

    Citation Envoyé par noftal Voir le message
    - Y a-t-il un moyen de récupérer un fichier d'aide qui permettrait d'avoir le détail de la syntaxe propre à HAP en tapant F1 comme on le fait sur VB.NET habituellement ?
    Pas à ma connaissance. Il n'y a même pas de documentation officielle sur le site...
    Tu peux utiliser l'intellisense de Visual Studio, il affiche la liste des méthodes disponibles avec une description succincte.

    Citation Envoyé par noftal Voir le message
    Certaines questions peuvent te paraître naïves, mais je suis débutant sur VB.NET et je suis encore plus ignare sur C#, langage que tu utilises dans tes exemples. Donc j'ai du mal à traduire en VB.NET ton dernier exemple, d'où les 2 premières questions.
    Tu peux t'aider du convertisseur disponible ici :
    http://www.developerfusion.com/tools.../csharp-to-vb/
    Il y a quelques bugs, mais ça marche à peu près

  20. #20
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Merci, grâce à ces indications, j'arrive enfin à faire à peu près tout.

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