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 :

Tableau de tableau


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut Tableau de tableau
    Bonjour à tous!
    Tout d'abord merci pour ce forum plein de ressource, cela m'a sauvé plus d'une fois.

    Voici mon problème:
    j'utilise urllib2 pour récupérer le contenu d'une url, puis je parse ce contenu pour récupérer des adresses de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.site.com/view_video.php?viewkey=47ea121ff34d2cb3d55f
    J'obtiens donc un tableau d'urls, mais j'aimerais par la suite récupérer le contenu de chacune de ces urls, ceci de façon récursive, afin de 'crawler' le site et de faire une arborescence du site.

    Je me posais donc la question de comment stocker ces urls?
    Quelle solution utiliseriez vous?

    Merci d'avance pour vos conseils

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Pour parcourir un tableau à plusieurs entrées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ligne in tableau:
      for colonne in ligne:
        print colonne
    Du coup, pour créer un tableau avec tes URL, tu peux essayer quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    urls = []
    for ligne in tableau:
      urls.append(ligne[3])
    (en supposant que les URL soient stockées dans la quatrième colonne de ton tableau)

    Je ne suis pas certain de répondre à ta question... mais je ne suis pas certain de bien l'avoir compris non plus
    N'hésite pas à demander plus d'informations si ça ne te suffit pas.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Ici il ne s'agit pas simplement d'un tableau à deux dimensions; comme le parcours est récursif, on ne connaît pas à priori le nombre dimensions (niveaux d'imbrications) du tableau. Il s'agit en fait d'un arbre.
    Je vois plutôt qqch comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def crawl(base_url, depth=1):
        tab = []
        # limiter le nombre de niveaux
        if depth > MAX_DEPTH:
            return tab
        # récupérer les urls avec urllib dans la variables urls
        urls = ...
        for url in urls:
            # chaque entrée du tableau est un tuple (url, tableau des sous-urls)
            # un dictionnaire serait plus élégant mais on perdrait l'ordre
            tab.append((url, crawl(url, depth+1)))
        return tab
    Ceci ne convient que s'il n'y a pas de possibilité de boucler entre 2 ou plusieurs urls; dans ce cas, il ne faudra plus représenter un arbre mais un graphe dirigé

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Merci beaucoup c'est apparemment exactement ce qu'il me faut!!
    Je vais de ce pas tester ton code dividee

    Merci aussi à toi alband85, ton code me sert juste à côté dans un parcours


  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Désolé mais j'ai un autre soucis:
    au sein de chaque page que je récupère je récupère chaque couple se présentant comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    http://www.site.com/view_video.php?viewkey=47ea121ff34d2cb3d55f
    http://site.com/thumbs/000/160/4444/small.jpg?cache_control=1234567
    Pour chaque vidéo il y a une image qui est un screen de la vidéo.

    Je peux récupérer ces deux infos sans soucis, néanmoins là où en C je construis une structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct _video {
            char url_video[255];
            char url_image[255];
    } video;
    ce qui me permet par la suite de déclarer un tableau d'éléments de type vidéo, je ne vois pas comment stocker des enregistrements de ce type là dans un tableau en python...

    Si vous aviez une idée, ce serait super

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Rien ne t'empêche de créer une structure sous forme d'une classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Video(object):
        def __init__(self, url_video="", url_image=""):
            self.url_video = url_video
            self.url_image = url_image
    Dans la liste (ou plutôt dans l'arbre), tu peux ajouter des objets de n'importe quel type en les mélangeant. Par exemple avec des objects "chaine" et "Video":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    L = []
    a0 = "http://www.site.com/view_video.php?viewkey=47ea121ff34d2cb3d55f"
    L.append(a0)
     
    a1 = "http://www.site.com/view_video.php?viewkey=47ea121ff34d2cb3d55f"
    a2 = "http://site.com/thumbs/000/160/4444/small.jpg?cache_control=1234567"
    L.append(Video(a1,a2))
    S'il y a plusieurs types, comme ci-dessus, on peut les exploiter en plaçant un test de type avec "type()" ou avec "isinstance():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if isinstance(L[i], Video):
        print L[i].url_video
        print L[i].url_image
    else:
        print L[i]
    ce qui, dans l'exemple ci-dessus, donnera bien avec i=0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.site.com/view_video.php?viewkey=47ea121ff34d2cb3d55f
    et avec i=1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    http://www.site.com/view_video.php?viewkey=47ea121ff34d2cb3d55f
    http://site.com/thumbs/000/160/4444/small.jpg?cache_control=1234567
    Tyrtamos

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Tout simplement magnifique!
    Merci pour tout c'est exactement ce que je voulais

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Heu j'ai encore un soucis

    J'ai défini ma méthode crawl dans une classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def crawl(self, base_url, depth):
         ...
         self.tab.append(self.urls[self.k], crawl(self.urls[self.k].url_video, depth + 1))
    return self.tab
    Mais lorsque je lance mon script python me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NameError: global name 'crawl' is not defined
    En gros la méthode refuse de s'appeler elle même même si la classe a été instanciée, donc que mon instance peut lancer cette méthode..

    Auriez vous une idée?

    Merci beaucoup encore une fois pour votre aide

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    C'est normal: à l'intérieur d'une classe, si tu appelles une méthode de cette classe, il faut la préfixer par self, sinon python cherche dans les variables globales et ne trouve pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ..., self.crawl(self.urls[self.k].url...
    Tyrtamos

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Merci pour tout ça marche maintenant
    Merci à tous pour votre aide

Discussions similaires

  1. [Tableaux] un tableau de tableau ??
    Par hitchie dans le forum Langage
    Réponses: 13
    Dernier message: 24/01/2006, 16h35
  2. Problème avec un tableau de tableau
    Par SubZero2 dans le forum Langage
    Réponses: 4
    Dernier message: 07/12/2005, 15h25
  3. [Tableaux] tableau de tableau
    Par Kerod dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2005, 19h30
  4. Réponses: 21
    Dernier message: 21/11/2005, 09h52
  5. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32

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