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 :

Construire une Regex pour en extraire un bloc de données en texte d'une page web


Sujet :

VBScript

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut Construire une Regex pour en extraire un bloc de données en texte d'une page web

    Voici un site d’où je veux extraire les données en texte depuis le bloc Information fichier svchost.exe
    S'il y a une âme charitable qui puisse m'aider dans cette tâche, je lui serai très reconnaissant

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    salut,
    quel pattern as-tu testé ?
    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
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    La stratégie canonique que je prendrais voluntier c'est de charger la page avec msxml2.domdocument et sortir la section que vous désirez sortie. La section est contenue dans un div avec un attribute id="box".

    Mais, hélas, la page contient de multiples erreurs graves. Elle est mal-formée au sens de xhtml, et puis, moins exigeant, de xml simple et puis, moins exigeant, de html non plus; tout. C'est pour ça, je suis d'accord pour sauver la situation, on peut prendre regexp comme un outil de pré-process.

    Voici un script qui montre l'essential qu'on peut faire pour les informations désirées en main.
    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
    50
    51
    52
    53
    54
    surl="http://fichier.net/processus/svchost.exe.html"
     
    set oxmlhttp=createobject("msxml2.xmlhttp.3.0")
    with oxmlhttp
        .open "post", surl, false
        .send
    end with
    s=oxmlhttp.responseText
    set oxmlhttp=nothing
    if s="" then
        wscript.echo "ResponseText est vide; programme va se terminer."
        wscript.quit 8
    end if
     
    set rx=new regexp
    with rx
        .pattern="<div\s+id\s?=""box""\s?>([\s\S]*?)</div>"
    end with
     
    set m=rx.execute(s)
    if m.count<>0 then
        s=m.item(0)
    else
        wscript.echo "La section souhaitée d'avoir n'est pas trouvée; programme va se terminer."
        wscript.quit
    end if
     
    '---------taitement spécial-----------
    '[1] ici c'est pour rectifier les erreurs graves dans la source de la page.
    s=replace (s, """""","""")    'the correct the text error
     
    '[2] ici, ce n'est pas une erreur, mais ça ne vaut pas la peine de provisionner un DTD à cette étape: c'est plus compliqué.
    s=replace (s, "&nbsp;", "&#xa0;")
    '---------taitement spécial-----------
     
    set oparser=createobject("msxml2.domdocument.6.0")
    with oparser
        .async=false
        .resolveExternals=true
        .validateOnParse=false
        bret=.loadxml(s)
        if not bret then
            wscript.echo .parseerror.errorcode & vbcrlf & .parseerror.reason
            wscript.echo "Programme va se terminer."
            set oparser=nothing
            wscript.quit 9
        end if
    end with
     
    'deux formats aux choices
    wscript.echo oparser.documentElement.text
    'wscript.echo oparser.xml
     
    set oparser=nothing
    Je n'ai pas pris soin d'embellir le script par plus de contrôls de détail etc... j'en suis sûr vous êtes capable de le mieux faire après l'essential est résolu.

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par omen999 Voir le message
    salut,
    quel pattern as-tu testé ?
    A vrai dire c'est le pattern qui me pose de problème car je n'ai pas encore trouvé le bout de fil pour y construire

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Voici un script qui montre l'essential qu'on peut faire pour les informations désirées en main.
    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
    50
    51
    52
    53
    54
    surl="http://fichier.net/processus/svchost.exe.html"
     
    set oxmlhttp=createobject("msxml2.xmlhttp.3.0")
    with oxmlhttp
        .open "post", surl, false
        .send
    end with
    s=oxmlhttp.responseText
    set oxmlhttp=nothing
    if s="" then
        wscript.echo "ResponseText est vide; programme va se terminer."
        wscript.quit 8
    end if
     
    set rx=new regexp
    with rx
        .pattern="<div\s+id\s?=""box""\s?>([\s\S]*?)</div>"
    end with
     
    set m=rx.execute(s)
    if m.count<>0 then
        s=m.item(0)
    else
        wscript.echo "La section souhaitée d'avoir n'est pas trouvée; programme va se terminer."
        wscript.quit
    end if
     
    '---------taitement spécial-----------
    '[1] ici c'est pour rectifier les erreurs graves dans la source de la page.
    s=replace (s, """""","""")    'the correct the text error
     
    '[2] ici, ce n'est pas une erreur, mais ça ne vaut pas la peine de provisionner un DTD à cette étape: c'est plus compliqué.
    s=replace (s, "&nbsp;", "&#xa0;")
    '---------taitement spécial-----------
     
    set oparser=createobject("msxml2.domdocument.6.0")
    with oparser
        .async=false
        .resolveExternals=true
        .validateOnParse=false
        bret=.loadxml(s)
        if not bret then
            wscript.echo .parseerror.errorcode & vbcrlf & .parseerror.reason
            wscript.echo "Programme va se terminer."
            set oparser=nothing
            wscript.quit 9
        end if
    end with
     
    'deux formats aux choices
    wscript.echo oparser.documentElement.text
    'wscript.echo oparser.xml
     
    set oparser=nothing
    et pour le script
    je vais le tester.
    @ bientôt


Discussions similaires

  1. [11gR1] Une regex pour formater une chaine de caractères
    Par akkyshan dans le forum PL/SQL
    Réponses: 6
    Dernier message: 11/02/2014, 17h27
  2. [RegEx] Créer une regex pour plaque d'immatriculation
    Par nicoreims dans le forum Langage
    Réponses: 1
    Dernier message: 12/02/2013, 22h19
  3. [RegEx] une regex pour différencier , et ,,
    Par louvinon dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2010, 13h52
  4. Extraire données fichier texte vers une matrice
    Par mygwel dans le forum MATLAB
    Réponses: 7
    Dernier message: 05/03/2009, 12h20
  5. Une regex pour changer des "-" en "/"
    Par lekunfry dans le forum Flex
    Réponses: 2
    Dernier message: 15/11/2007, 11h38

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