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

VBScript Discussion :

Lire le code source à partir d'une page Web et en extraire des données par RegEx


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut Lire le code source à partir d'une page Web et en extraire des données par RegEx
    Je veux lire un code source à partir d'une page Web et en extraire des données.
    J'ai utilisé ici dans mon exemple une RegEx pour extraire les données, mais je n'ai pas eu toutes les données, peut-être cela est dû à l'unicode ou le modèle ne correspond pas?
    Quand je teste ce modèle avec RegExBuddy, cela correspond, mais avec vbscript j'obtiens rien ?
    Merci de votre aide !
    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
    sSrcUrl = "https://fr.giveawayoftheday.com/"
    Set oHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    bGetAsAsync = False
    oHTTP.open "GET", sSrcUrl, bGetAsAsync
    oHTTP.send
    If oHTTP.status <> 200 Then
    WScript.Echo "unexpected status = " & oHTTP.status & vbCrLf & oHTTP.statusText
    WScript.Quit
    End If
    Data = oHTTP.responseText
    wscript.echo Extract(Data)
    '****************************************************************
    Function Extract(Data)
        Dim oRE,oMatches,Match,Line
        set oRE = New RegExp
        oRE.IgnoreCase = True
        oRE.Global = True
        oRE.MultiLine = True
        oRE.Pattern = "<div class=""giveaway_wrap cf"">(\r.*\n.*){17}</div>"
        set oMatches = oRE.Execute(Data)
        If not isEmpty(oMatches) then
            For Each Match in oMatches   
                Line = Match.Value
                Extract = Line
            Next
        End if 
    End Function
    '*****************************************************************
    Donc, le résultat que j'attends est:
    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
    <div class="giveaway_wrap cf">
                        <div class="giveaway_img">
                            <img src="https://giveawayoftheday.com/wp-content/uploads/2017/10/82810932353ab590bf475ea3980f3038.png" alt="Excel Url Validator 1.0 Giveaway" />
                            <div class="giveaway_label">
                                <a href="https://fr.giveawayoftheday.com/excel-url-validator-1-0/" class="label_link"></a>
                                <div class="old_price">$40.00</div>
                                <div class="free">
                                    <span class="big">GRATUIT</span> aujourd’hui
                                </div>
                            </div>
                        </div>
                        <div class="over">
                            <div class="giveaway_title">
                                <a href="https://fr.giveawayoftheday.com/excel-url-validator-1-0/">Excel Url Validator 1.0</a>
                                <div class="giveaway_date">16 octobre 2017</div>
                            </div>
                            <div class="giveaway_descr">Excel Url Validator trouve des liens rompus dans les feuilles de calcul Excel.</div>
                        </div>

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,

    (très) vite fait, je soupçonne un problème de syntaxe spécifique au RegExp de Microsoft
    la syntaxe {n} ne s'applique a priori qu'au caractère unique précédant l'accolade ouvrante
    et non au groupe contenu dans les parenthèses capturantes
    à tester...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Merci pour la remarque, mais je séche encore

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Salut,

    essaye avec ceci:
    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
     
    sSrcUrl = "https://fr.giveawayoftheday.com/"
    Set oHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    bGetAsAsync = False
    oHTTP.open "GET", sSrcUrl, bGetAsAsync
    oHTTP.send
    If oHTTP.status <> 200 Then
    WScript.Echo "unexpected status = " & oHTTP.status & vbCrLf & oHTTP.statusText
    WScript.Quit
    End If
    Data = oHTTP.responseText
    wscript.echo Extract(Data)
    '****************************************************************
    Function Extract(Data)
        Dim oRE,oMatches,Match,Line
        set oRE = New RegExp
        oRE.IgnoreCase = True
        oRE.Global = True
        oRE.MultiLine = TRUE
        oRE.Pattern = "<div class=""giveaway_wrap cf"">(?:(?!""giveaway_counter first"">)[\s\S])*</div>"
        set oMatches = oRE.Execute(Data)
        If not isEmpty(oMatches) then
            For Each Match in oMatches   
                Line = Match.Value
                Extract = Line
            Next
        End if 
    End Function
    '*****************************************************************

  5. #5
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    et pour votre réponse qui marche très bien
    Pouvez-vous juste m'expliquer pourquoi dans mon pattern ne marche pas en vbscript, mais ça marche bien sur RegExBuddy ? et si c'est possible m'expliquer pourquoi vous avez choisi ce pattern et de le me commenter un peu

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    Pouvez-vous juste m'expliquer pourquoi dans mon pattern ne marche pas en vbscript
    son pattern contient des PCRE Perl Compatible Regular Expressions comme ! ou : qui ne sont pas
    supportées par le regexp de microsoft
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    Citation Envoyé par hackoofr Voir le message
    Pouvez-vous juste m'expliquer pourquoi dans mon pattern ne marche pas en vbscript,
    j'ai pas creuser la question mais ton code à quelques problème (\r.*\n.*){17} ceci peux matcher \r\ntext1\r\n mais aussi \rtext1\ntext2 vaux mieux utiliser \r?\ntext à place pour etre compatible avec presque tous les retours à la ligne

    maintenant pourquoi ceci à marcher sur regexbuddy et non pas sur vbscript...je ne sais pas il faut creusé un petit peu l'affaire, peux etre que c'est une optimisation sur regxbuddy

    Citation Envoyé par hackoofr Voir le message
    et si c'est possible m'expliquer pourquoi vous avez choisi ce pattern et de le me commenter un peu
    ton pattern est basé sur la prayer-parsing est puisque qu'on travaille avec du html il faut atre plus strict que possible...la signification du pattern

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2013, 17h04
  2. Réponses: 11
    Dernier message: 29/05/2011, 11h55
  3. Cacher le code source JS d'une page
    Par okoweb dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/10/2010, 20h17
  4. Afficher le code source HTML d'une page
    Par piratack007 dans le forum Langage
    Réponses: 6
    Dernier message: 15/09/2009, 23h29
  5. Réponses: 4
    Dernier message: 24/02/2006, 08h16

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