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

Python Discussion :

parsing d'une variable javascript tableau


Sujet :

Python

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    116
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Par d�faut parsing d'une variable javascript tableau
    Bonjour,

    Je parse des donn�es depuis un site, il se trouve qu'une des pages utilise de l'immonde javascript pour stocker les informations que je veux, dans un tableau complexe en plus

    Voici la var:
    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
    <script language="JavaScript"><!--
    	var myMenu =
    	[
    		['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif" /></i></span>', '/', '#', '', '', 
    		['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat1', '#', '', '',
    		['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat1.1', '#', '', '',,['','TitleDoc1.1 (Doc1.1.txt)','https://***/docman/view.php/22/9/Doc1.1.txt','','DescDoc1.1 10Char' ],
    		],
    		['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat1.2', '#', '', '',,
    		],,['','Agenda1 (Dummy.txt)','https://***/docman/view.php/22/14/Dummy.txt','','DescriptionAgenda1' ],['','TitleDoc1 (Doc1.txt)','https://***/docman/view.php/22/8/Doc1.txt','','DescDoc1 10 char' ],
    		],
    		['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat2', '#', '', '',,['','TitleDoc2 (Doc2.txt)','https://***/docman/view.php/22/10/Doc2.txt','','DescriptionDoc2' ],['','TitleDoc2.1 (Doc2.1.txt)','https://***/docman/view.php/22/12/Doc2.1.txt','','DescriptionDoc2.1' ],['','TitleDoc2.2 (Doc2.2.txt)','https://***/docman/view.php/22/11/Doc2.2.txt','','DescriptionDoc2.2' ],
    		],
    		['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Uncategorized Submissions', '#', '', '',,['','uncategDocument (DocPasCateg.txt)','https://***/docman/view.php/22/13/DocPasCateg.txt','','DescriptionUncatDoc' ],
    		],		]
    	];
    	ctDraw ('myMenuID', myMenu, ctThemeXP1, 'ThemeXP', 0, 1);
    	--></script>
    Une fonction se sert ensuite de cette var pour faire une sorte de vue en arborescence dynamique dossier/fichier. Moi je veux parser le nom des dossiers (Cat1, Cat1.1, Cat2...) et les fichiers (pour le dernier par exemple, titre UncatDocument (le titre), DocPasCateg.txt (le nom du fichier), le lien pour dl le fichier en question, et la description (DescriptionUncatDoc).

    Je m'en sors pas, pour du html tout beau BeautifuLSoup marche bien, mais cette variable me casse la t�te et je trouve pas de regex pour r�cup�rer ce que je veux :/

    Une id�e d'un outil � utiliser ou d'une regex magique?

    Merci,
    Hydex

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par d�faut
    Bonjour,



    Qu�est ce que c�est, ce qui se trouve dans la fen�tre Code: ?
    du code Javascript ? du code Python ? des lignes de caract�res qui sont celles du code source du site ?



    Ce qui m�intrigue est la structure du genre

    [�abc�+Theme+�abc�+Theme+�abc�, '/', '#', '', '',
    [�abc�+Theme+�abc�+Theme+�abc�,'Cat1', '#', '', '',
    [�abc�+Theme+�abc�+Theme+�abc�,'Cat1.1', '#', '', '',,[moult],
    ],

    � quoi correspondent les crochets ? Liste ? Caract�res ? Autre chose ?




    Qu�est ce que ctThemeXPBase ?



    Quelle est la variabilit� des parties stables ?
    Ex: 'folderopen1.gif" /></i></span>' dans la premi�re ligne,
    'folderopen1.gif"></i></span>' dans les autres




    Une regex ne devrait pas �re trop dur � trouver, mais je n�ai pas le temps avant ce soir.

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par d�faut
    Bonjour,

    J'ai �crit une boucle (avec 2 boucles imbriqu�es) qui retrouve le dossiers. Le truc utilis� est le fait que les nom de dossiers 'Cat1', 'Cat1.1' sont dans des listes et sont suivis dans la liste par un �l�ment '#'.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ctThemeXPBase = "ctThemeXPBase"
    L =  [# /:
        ['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif" /></i></span>', '/', '#', '', '',
            # Cat1:
            ['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span                         class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat1', '#', '', '', 
                # Cat1.1
                ['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat1.1', '#', '', '', 
                    ['','TitleDoc1.1 (Doc1.1.txt)','https://***/docman/view.php/22/9/Doc1.1.txt','','DescDoc1.1 10Char' ],
                ],
                # Cat1.2:
                ['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat1.2', '#', '', '', 
                ],
     
                ['','Agenda1 (Dummy.txt)','https://***/docman/view.php/22/14/Dummy.txt','','DescriptionAgenda1' ],
                ['','TitleDoc1 (Doc1.txt)','https://***/docman/view.php/22/8/Doc1.txt','','DescDoc1 10 char' ],
            ],
            # Cat2:
            ['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Cat2', '#', '', '',
                ['','TitleDoc2 (Doc2.txt)','https://***/docman/view.php/22/10/Doc2.txt','','DescriptionDoc2' ],
                ['','TitleDoc2.1 (Doc2.1.txt)','https://***/docman/view.php/22/12/Doc2.1.txt','','DescriptionDoc2.1' ],
                ['','TitleDoc2.2 (Doc2.2.txt)','https://***/docman/view.php/22/11/Doc2.2.txt','','DescriptionDoc2.2' ],
            ],
     
            ['<span class="JSCookTreeFolderClosed"><i><img alt="" src="' + ctThemeXPBase + 'folder1.gif" /></i></span><span class="JSCookTreeFolderOpen"><i><img alt="" src="' + ctThemeXPBase + 'folderopen1.gif"></i></span>', 'Uncategorized Submissions', '#', '', '',
                ['','uncategDocument (DocPasCateg.txt)','https://***/docman/view.php/22/13/DocPasCateg.txt','','DescriptionUncatDoc' ],
            ]
        ]
        ]
    for l in L:
        print "premier dossier:", repr(l[l.index('#')-1])
        for li in filter(lambda x: type(x) == list, l):
            if '#' in li:
                print "sous-dossier dossier:", repr(li[li.index('#')-1])
                for mi in filter(lambda x: type(x) == list, li):
                    if '#' in mi:
                        print "sous-sous-dossier dossier:", repr(mi[mi.index('#')-1])
    On fait tourner et �a donne:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    premier dossier: '/'
    sous-dossier dossier: 'Cat1'
    sous-sous-dossier dossier: 'Cat1.1'
    sous-sous-dossier dossier: 'Cat1.2'
    sous-dossier dossier: 'Cat2'
    sous-dossier dossier: 'Uncategorized Submissions'
    Si il y a une plus grande profondeur de sous-dossiers, � mon avis il faut supprimer les boucles imbriqu�es et �crire une petite fonction r�cursive.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par d�faut
    ceci recupere tout, dans l'ordre.
    on peut modifier ci et l� pour obtenir l'information sous une forme plus ad�quate.
    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
    import re
     
    def is_doc_list(l):
        return any(map(lambda x: '.txt' in x, l))
     
    def get_info(x):
        title_and_name = x[1]
        link = x[2]
        description = x[4]
        pat_1 = r"([\w.]+)\s+\(([\w.]+)\)"
        m1 = re.search(pat_1, title_and_name)
        return m1.groups(), link, description
     
     
    def job(M, i):
        if type(M) is list:
            for m in M:
                if '#' in m and len(m)>2:
                    print " "*i + str(i) + ')' +"dossier:", repr(m[m.index('#')-1])
                if is_doc_list(m):
                    print " "*(i+1) + "file information:", get_info(m)
                job(m, i + 1)
     
    if __name__ == "__main__":
        job(L, 1)
    J'ai initialis� � la main la variable L,...

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    116
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Par d�faut
    Citation Envoy� par eyquem Voir le message
    Bonjour,



    Qu�est ce que c�est, ce qui se trouve dans la fen�tre Code: ?
    du code Javascript ? du code Python ? des lignes de caract�res qui sont celles du code source du site ?



    Ce qui m�intrigue est la structure du genre

    [�abc�+Theme+�abc�+Theme+�abc�, '/', '#', '', '',
    [�abc�+Theme+�abc�+Theme+�abc�,'Cat1', '#', '', '',
    [�abc�+Theme+�abc�+Theme+�abc�,'Cat1.1', '#', '', '',,[moult],
    ],

    � quoi correspondent les crochets ? Liste ? Caract�res ? Autre chose ?




    Qu�est ce que ctThemeXPBase ?



    Quelle est la variabilit� des parties stables ?
    Ex: 'folderopen1.gif" /></i></span>' dans la premi�re ligne,
    'folderopen1.gif"></i></span>' dans les autres




    Une regex ne devrait pas �re trop dur � trouver, mais je n�ai pas le temps avant ce soir.
    C'est un bout de javascript dans le code source d'une page, qui contient du formatage m�lang� � des informations que je veux extraire (cat�gories, et fichiers dans ces cat�gories)
    Qu�est ce que ctThemeXPBase ?



    Quelle est la variabilit� des parties stables ?
    Ex: 'folderopen1.gif" /></i></span>' dans la premi�re ligne,
    'folderopen1.gif"></i></span>' dans les autres
    C'est du bruit! A priori c'est du fixe.


    Citation Envoy� par miawaw Voir le message
    ceci recupere tout, dans l'ordre.
    on peut modifier ci et l� pour obtenir l'information sous une forme plus ad�quate.
    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
    import re
     
    def is_doc_list(l):
        return any(map(lambda x: '.txt' in x, l))
     
    def get_info(x):
        title_and_name = x[1]
        link = x[2]
        description = x[4]
        pat_1 = r"([\w.]+)\s+\(([\w.]+)\)"
        m1 = re.search(pat_1, title_and_name)
        return m1.groups(), link, description
     
     
    def job(M, i):
        if type(M) is list:
            for m in M:
                if '#' in m and len(m)>2:
                    print " "*i + str(i) + ')' +"dossier:", repr(m[m.index('#')-1])
                if is_doc_list(m):
                    print " "*(i+1) + "file information:", get_info(m)
                job(m, i + 1)
     
    if __name__ == "__main__":
        job(L, 1)
    J'ai initialis� � la main la variable L,...
    Super merci beaucoup, je vais tester �a !




    Les regexp ne sont pas mes amies malheureusement :/

Discussions similaires

  1. envoyer une variable(un tableau) via un lien href
    Par sebduduf dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 7
    Dernier message: 11/11/2005, 16h52
  2. Utilisation d'une variable Javascript en html
    Par Crazynoss dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 28/10/2005, 16h43
  3. [PHP-JS] R�cuperer une variable javascript..
    Par gwendy dans le forum Langage
    R�ponses: 3
    Dernier message: 17/10/2005, 21h24
  4. Affecter une variable javascript � une variable php
    Par gwendy dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 17/10/2005, 20h58
  5. R�cup�rer une variable --> Javascript+CSS
    Par Skarlix dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 30/08/2005, 16h01

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