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

ASP.NET Discussion :

extraire une partie d'un site web [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de jolona
    Homme Profil pro
    Technicien metodes
    Inscrit en
    Avril 2010
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien metodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 233
    Points : 104
    Points
    104
    Par défaut extraire une partie d'un site web
    bonjour,

    je souhaite récupérer une partie d'un site web, voir fichier ""matchBETA.htm dans le .RAR""

    j'aimerais récupérer uniquement les deux tableaux de score...

    j'aimerais avoir des conseils pour la réalisation : là, je récupère l'intégralité du code source avec un "HttpWebRequest" ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = objStreamReader.ReadToEnd()
    puis je lis caractère par caractère pour identifier les balises d'ouverture et de fermeture... et apres j'ecris dans un label les balises qui m'interesse, y-a-t-il un moyen plus simple, d'identifier les balises?

    merci
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Utilise Html Agility Pack. C'est un outil qui permet de parser du HTML facilement, un peu comme si c'était du XML mais en tenant compte des spécificités de HTML.

    Le premier tableau est dans un div avec un id ("poule"), donc ça devrait pas être trop difficile à récupérer. Par contre le 2e n'a aucun identifiant, donc c'est un peu plus coton... il faut parcourir la page en allant directement à sa position (genre la n-ième ligne du n-ième tableau...)

  3. #3
    Membre régulier Avatar de jolona
    Homme Profil pro
    Technicien metodes
    Inscrit en
    Avril 2010
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien metodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 233
    Points : 104
    Points
    104
    Par défaut
    ok je vais essayer, affaire à suivre

  4. #4
    Membre régulier Avatar de jolona
    Homme Profil pro
    Technicien metodes
    Inscrit en
    Avril 2010
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien metodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 233
    Points : 104
    Points
    104
    Par défaut
    voici le 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
    26
    27
    Dim doc As New HtmlDocument()
            doc.LoadHtml(val)
            Dim cpt As Integer = 0
            For Each table As HtmlNode In doc.DocumentNode.SelectNodes("//table")
                Console.WriteLine("Found: " + table.Id)
                For Each row As HtmlNode In table.SelectNodes("tr")
                    Console.WriteLine("row")
                    For Each cell As HtmlNode In row.SelectNodes("td")
                        Console.WriteLine("cell: " + cell.InnerText)
                        'MsgBox("cell: " + cell.InnerText)
                        cpt += 1
                        If cpt = 6 Then
                            Label1.Text = cell.InnerText.Replace("&nbsp;", "<br/>")
                            Exit For
                        End If
                        If cpt = 6 Then
                            Exit For
                        End If
                    Next
                    If cpt = 6 Then
                        Exit For
                    End If
                Next
                If cpt = 6 Then
                    Exit For
                End If
            Next
    par contre le formatage whoua...

    j'obtiens ça:

    "COMPOSITION DE LA POULE&nbsp;&nbsp;VELO SPORT FERTOIS&nbsp;&nbsp;RUGBY CLUB HERBRETAIS&nbsp;&nbsp;R C CASTROGONTERIEN&nbsp;&nbsp;RUGBY CLUB COLOMBANAIS&nbsp;&nbsp;VELO SPORT NANTAIS&nbsp;&nbsp;PATRIOTE BONNETABLE&nbsp;&nbsp;RUGBY OLYMPIQUE MAYENNAIS&nbsp;&nbsp;E S SEGRE HAUT ANJOU&nbsp;&nbsp;LE CELTIC RUGBY CLUB&nbsp;&nbsp;STADE TREILLIERAIN&nbsp;EQUIPE LOCALE&nbsp;POINTS&nbsp;POINTS&nbsp;EQUIPE VISITEUSE&nbsp;DATE&nbsp;DETAIL &nbsp;&nbsp;E S SEGRE HAUT ANJOU&nbsp;25&nbsp;3&nbsp;&nbsp;VELO SPORT FERTOIS&nbsp;09/10/2011 - 15:00 &nbsp;&nbsp;RUGBY OLYMPIQUE MAYENNAIS&nbsp;10&nbsp;10&nbsp;&nbsp;RUGBY CLUB HERBRETAIS&nbsp;09/10/2011 - 15:00 &nbsp;&nbsp;PATRIOTE BONNETABLE&nbsp;25&nbsp;0&nbsp;&nbsp;R C CASTROGONTERIEN&nbsp;09/10/2011 - 15:00 &nbsp;&nbsp;VELO SPORT NANTAIS&nbsp;35&nbsp;5&nbsp;&nbsp;RUGBY CLUB COLOMBANAIS&nbsp;09/10/2011 - 15:00 &nbsp;&nbsp;LE CELTIC RUGBY CLUB&nbsp;13&nbsp;40&nbsp;&nbsp;STADE TREILLIERAIN&nbsp;09/10/2011 - 15:00"
    je .Replace("&nbsp;", "<br/>") mais c'est hyper chiant pour recuperer les données correctement

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 63
    Points
    63
    Par défaut
    Pourquoi ne pas utiliser des Regular Expression ?
    Si tu emploi le Regex suivant dans une page, tu obtiens les valeurs hors code HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    string pageHtml = "<html>...."; // ici c'est la source de la page
    //tu coupes tout ce que tu peux en haut et en bas, ce qui est inutile
    pageHtml = pageHtml.Substring(pageHtml.IndexOf("</head>");
    pageHtml = pageHtml.Substring(0, pageHtml.IndexOf("</html>");
    Regex regex = new Regex(@"(?<=>)(?<=[\n\s])?(?:(?<t>[^<]*))");
    MatchCollection matches = regex.Matches(pageHtml);
    foreach (Match m in matches )
    {
    //Je purge les données
    }

  6. #6
    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 digital3d Voir le message
    Pourquoi ne pas utiliser des Regular Expression ?
    Parce que c'est totalement inadapté pour parser du HTML, et qu'en utilisant des regex pour ça tu ne fais que réinventer quelque chose qui existe déjà : un parseur HTML...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 63
    Points
    63
    Par défaut
    Oui parce que l'outil proposé est un outil externe et non intégré à la base dans Visual Studio. J'aime moi partir du principe qu'il n'y a aucun outil externe, parce que souvent, parfois ils sont abandonnés ou plus à jour. Par expérience, je suis arriver à être bloqué dans de tel cas et j'ai du tout recommencer à zéro.

  8. #8
    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 digital3d Voir le message
    Oui parce que l'outil proposé est un outil externe et non intégré à la base dans Visual Studio. J'aime moi partir du principe qu'il n'y a aucun outil externe, parce que souvent, parfois ils sont abandonnés ou plus à jour. Par expérience, je suis arriver à être bloqué dans de tel cas et j'ai du tout recommencer à zéro.
    OK, donc tu n'utilises jamais aucun outil tiers ? Tu fais tout toi-même, quitte à réinventer la roue ? C'est pas très malin... si j'étais recruteur, je t'embaucherais pas : ça me ferait vraiment ch*** que mes employés perdent leur temps à réinventer des choses qui existent déjà.

    Pour ce qui est de HTML Agility Pack, même si son développement était abandonné, vu le nombre de personnes qui l'utilisent il serait certainement repris par quelqu'un d'autre (vu qu'il est open-source, ce n'est pas un problème). Et même s'il n'était pas repris, il fonctionne déjà très bien dans l'état actuel. Vu la vitesse à laquelle évolue le langage HTML (environ 12 ans entre les versions 4 et 5), HAP devrait continuer à rendre de bons et loyaux services pendant encore pas mal d'années...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par tomlev Voir le message
    OK, donc tu n'utilises jamais aucun outil tiers ? Tu fais tout toi-même, quitte à réinventer la roue ? C'est pas très malin... si j'étais recruteur, je t'embaucherais pas : ça me ferait vraiment ch*** que mes employés perdent leur temps à réinventer des choses qui existent déjà.
    Sympa!

  10. #10
    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 digital3d Voir le message
    Sympa!
    Non, juste réaliste

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 63
    Points
    63
    Par défaut
    Juste pour te dire que le développeur à la con que je suis a créer des logiciels comme Subviewer, ZapDreambox ou TvSeriesGuide qui lui prend parti de la puissance Regex et HTML à fond, ca marche tellement bien, que même quand le site Tv.Com se met à jour et change son design (là ou je pompe l'info), je ne suis pas du tout dépendant à la structure HTML. Je suis .Net Senior Developer dans ma boîte et respecté de tous et c'est pas parce que je n'utilise pas un outil externe dont tu mentionnes que je n'en utilise pas d'autres. J'aime juste m’expérimenter à la manière brut. Aussi, ce forum est là justement pour s'entraider, j'en gère un aussi de mon côté, et même si je fais des erreurs ou que je dis des bêtises, m'agresser comme ca, surtout que tu es en plus l'administrateur, n'est vraiment pas sympa. De l'aide aurait été le bienvenu si je me trompais de route. Tu ne me connais pas du tout, je débutais sur ce forum, j'essayais juste de rendre service, ce qui était sympa de ma part.
    Tu ne m'engagerais peut être pas, mais moi, je n'ai même pas besoin de voir comment tu développes pour t'engager, en t'écoutant j'ai compris qui tu es.

  12. #12
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,
    Citation Envoyé par tomlev Voir le message
    C'est pas très malin... si j'étais recruteur, je t'embaucherais pas
    Au contraire, cela se défend. Récemment, j'ai eu connaissance d'une société qui est obligée de maintenir elle-même la version .Net d'une librairie 3D en C++. Cette librairie est open source est la version .Net n'est plus maintenue. Cela peut devenir couteux.

    A considérer au cas par cas.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  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 digital3d Voir le message
    Juste pour te dire que le développeur à la con que je suis a créer des logiciels comme Subviewer, ZapDreambox ou TvSeriesGuide qui lui prend parti de la puissance Regex et HTML à fond, ca marche tellement bien, que même quand le site Tv.Com se met à jour et change son design (là ou je pompe l'info), je ne suis pas du tout dépendant à la structure HTML. Je suis .Net Senior Developer dans ma boîte et respecté de tous et c'est pas parce que je n'utilise pas un outil externe dont tu mentionnes que je n'en utilise pas d'autres. J'aime juste m’expérimenter à la manière brut. Aussi, ce forum est là justement pour s'entraider, j'en gère un aussi de mon côté, et même si je fais des erreurs ou que je dis des bêtises, m'agresser comme ca, surtout que tu es en plus l'administrateur, n'est vraiment pas sympa. De l'aide aurait été le bienvenu si je me trompais de route. Tu ne me connais pas du tout, je débutais sur ce forum, j'essayais juste de rendre service, ce qui était sympa de ma part.
    Oula oula, du calme... Je n'insinuais pas du tout que tu étais "un développeur à la con". Tu es peut-être un très bon développeur, je n'en sais rien, comme tu l'as dit je ne te connais pas... Ma remarque comme quoi "je ne t'embaucherais pas" était volontairement exagérée pour enfoncer le clou, parce que personnellement je trouve absurde le principe de ne jamais utiliser d'outils tiers. Mais bon, chacun est libre de ses choix... Ce ne serait évidemment pas un argument suffisant pour décider ou non de t'embaucher le cas échéant

    Bref, ma remarque était sans doute maladroite, mais ce n'était pas une attaque personnelle ; je m'excuse si c'est comme ça que tu l'as prise, ce n'était pas mon intention.

    Citation Envoyé par digital3d Voir le message
    Tu ne m'engagerais peut être pas, mais moi, je n'ai même pas besoin de voir comment tu développes pour t'engager, en t'écoutant j'ai compris qui tu es.
    Je te retourne ta remarque : tu ne me connais pas non plus, donc non, tu ne sais pas qui je suis...

  14. #14
    Membre régulier Avatar de jolona
    Homme Profil pro
    Technicien metodes
    Inscrit en
    Avril 2010
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien metodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 233
    Points : 104
    Points
    104
    Par défaut
    Oula, désoler les gars, j'ai peu être parler d'un sujet qui attise la discordance (ce qui permet de connaitre plusieurs avis sur un même sujet).
    C’est vrai que ce qui est génial sur ce forum, c’est qu’il y a un vrai partage, mais c’est vrai que des fois aussi des membres un peu plus caler oublie qu’il y a des gens qui débute, pour ma part je ne suis pas informaticien, je suis technicien méthode et j’ai suivi des formation chez ENI ; donc après je créais des petits projet pour apprendre à mieux utiliser l’environnement .NET… mais ce n’est pas simple et acquis, moi personnellement je demande simplement un peu d'indulgence, lol…
    Donc voilà, sinon pour mon sujet, je stock dans une liste d'élément de string tout les champs qui sont entre ">" et "<", donc j'ai environ 1250 élément, je suis partie du principe que les champs dans le site ne vont pas changer ce qui est chiant car chaque année je serais obliger de changer ma valeur Item de depart qui est plus bas, à voir, ca va faire mal:
    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
     
    	 Dim letter, phrase As String
            Dim i, iphrase, charsInFile, paracount As Integer
     
            Dim phraselst As New List(Of String)
            Dim codeInt As Integer = Asc(" ")
     
            paracount = 0
            phrase = ""
            charsInFile = Len(val) 
     
            For i = 0 To charsInFile - 1
                letter = val.Substring(i, 1)
     
                If letter = Chr(62) Then
                    iphrase = 1
                    paracount += 1
                End If
                If letter = Chr(60) Then
                    iphrase = 2
                    paracount -= 1
                End If
     
                If iphrase = 0 Then
     
                ElseIf iphrase = 1 Then
                    phrase &= letter
                ElseIf iphrase = 2 Then
                    If paracount <= 1 Then
                        phrase &= letter
                        phraselst.Add(phrase)
                        phrase = ""
                        iphrase = 0
                    ElseIf paracount <> 1 Then
                        phrase &= letter
                        paracount -= 1
                    End If
                End If
            Next i
    Mes données sont en deux type en premier comme ceci :
    ">E S SEGRE HAUT ANJOU<"
    ==> il faut que j’enlève les
    « > »
    et les
    « < »
    ou encor comme ceci
    ">&nbsp;3<"
    ==> il faut que j’enlève les
    «>&nbsp;»
    et les
    « < »
    Donc pour cela attention aux yeux :
    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
     
    	For i = 0 To 4
     
                phraselst.Item(item) = phraselst.Item(item).Replace(">", "")
                phraselst.Item(item) = phraselst.Item(item).Replace("<", "")
     
                phraselst.Item(item + 4) = phraselst.Item(item + 4).Replace(">&nbsp;", "")
                phraselst.Item(item + 4) = phraselst.Item(item + 4).Replace("<", "")
                phraselst.Item(item + 4) = " <span style=" & Chr(34) & "color: #FF0000" & Chr(34) & "> " & phraselst.Item(item + 4) & " </span> "
     
     
                phraselst.Item(item + 4 + 2) = phraselst.Item(item + 4 + 2).Replace(">&nbsp;", "")
                phraselst.Item(item + 4 + 2) = phraselst.Item(item + 4 + 2).Replace("<", "")
                phraselst.Item(item + 4 + 2) = " <span style=" & Chr(34) & "color: #FF0000" & Chr(34) & "> " & phraselst.Item(item + 4 + 2) & " </span> "
     
                phraselst.Item(item + 4 + 2 + 5) = phraselst.Item(item + 4 + 2 + 5).Replace(">", "")
                phraselst.Item(item + 4 + 2 + 5) = phraselst.Item(item + 4 + 2 + 5).Replace("<", "")
     
                phraselst.Item(item + 4 + 2 + 5 + 4) = phraselst.Item(item + 4 + 2 + 5 + 4).Replace(">&nbsp;", "")
                phraselst.Item(item + 4 + 2 + 5 + 4) = phraselst.Item(item + 4 + 2 + 5 + 4).Replace("<", "")
                phraselst.Item(item + 4 + 2 + 5 + 4) = " <span style=" & Chr(34) & "color: #FF0000" & Chr(34) & "> " & phraselst.Item(item + 4 + 2 + 5 + 4) & " </span> "
     
                If Label1.Text = "Label" Then
                    Label1.Text = phraselst.Item(item) & " " & phraselst.Item(item + 4) & " à " & phraselst.Item(item + 4 + 2) & " " & phraselst.Item(item + 4 + 2 + 5) & " le " & phraselst.Item(item + 4 + 2 + 5 + 4)
                Else
                    Label1.Text = Label1.Text & "<br />" & "<br />" & phraselst.Item(item) & " " & phraselst.Item(item + 4) & " à " & phraselst.Item(item + 4 + 2) & " " & phraselst.Item(item + 4 + 2 + 5) & " le " & phraselst.Item(item + 4 + 2 + 5 + 4)
                End If
                item += 25
            Next i
    Pour info voice la source : RUGBY et ce que moi j’obtiens : RUGBY mon site

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/12/2014, 06h36
  2. extraire une photo depuis un site web
    Par azstar dans le forum C#
    Réponses: 3
    Dernier message: 19/09/2011, 17h05
  3. extraire une partie d'image d'une image source
    Par Zen_Fou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2006, 11h20
  4. extraire une partie d'un document rtf
    Par yac dans le forum Oracle
    Réponses: 12
    Dernier message: 08/01/2006, 10h44
  5. Quelle taille en pixels pour une animation d'un site web?
    Par ned-flanders dans le forum Flash
    Réponses: 6
    Dernier message: 06/10/2005, 11h26

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