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

Réseau/Web Python Discussion :

Aspirateur python 2.7


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Par défaut Aspirateur python 2.7
    Bonjour, je travail sur un programme python me permettant de recuperer/sauvegarder tous les fichier de dossier d'un site, mais mon code ne fait que deux niveau, je m'explique:
    /documents contient 3 dossier et 6 documments.
    Les 6 docs sont telechargé, et les 3 dossier aussi mais dans /document/dir1, il y a un sous dossier qui s'appelle test, et lui n'est pas telechargé.
    Comment je pourrais faire pour adaptre mon code à ca (python 2.7).

    Merci beaucoup
    Code PHP : 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
     
    #coding=utf-8
     
     
    import urllib, urllib2, re, argparse, os
     
    def download(tab):
      subDirectory = []
      for i in tab:
        try:
          urllib.urlretrieve(arguments['url']+i, i)
          print 'Telechargement de : ' + i
        except IOError as (strerr, strer):
          print 'Download Failed ' + i +  ' ' + strer
          if strer == 'Is a directory' :
    	subDirectory.append(i)
      return subDirectory
     
     
    parser = argparse.ArgumentParser(description='Get All Document from a page')
    parser.add_argument('url', action="store", help="Give an url to scan")
    args = parser.parse_args() 
    arguments = dict(args._get_kwargs()) 
     
    requete = urllib2.Request(arguments['url'])
    page = urllib2.urlopen(requete).read()
     
    variable =  re.findall('\<a href="(.+?)"', page)
    firstSub = download(variable)
    print firstSub
    for i in firstSub:
      if i != '/' :
        os.mkdir(i)
        print 'Telechargement de : ' +  arguments['url'] + i
        requete = urllib2.Request(arguments['url'] + i)
        page = urllib2.urlopen(requete).read()
        variable = re.findall('\<a href="(.+?)"', page)
        download(variable)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Par défaut
    bonjour, la premier chose qui me vien serais laa recursivité.

    tu fait une fonction qui sert a aspirer un dossier.
    pour chaque element de ce dossier, si verifie si il sagis d'un fichier, si oui, tu le telecharge, si non, c'est un dossier:
    tu creer un dossier du meme nom en local, et tu rapel la fonction dans ce dossier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def aspire_dir(dossier_distant,dossier_local):
        for file in get_elements_in_dir(dossier_distant):
            if is_dir(dossier_distant + file):
                create_dir(dossier_local + file)
                aspire_dir(dossier_distant+file,dossier_local+file)
            else:
                download(dossier+file,dossier_local+file)
    grossierement, ce devrais marcher, a toi de definire tes fonction
    • get_elements_in_dir
    • is_dir
    • create_dir (= os.makedir())
    • download


    et ou download ne ferais que telecharger un seul fichier donné en parametre.

    fait tres attention, comme tu peut le voire, un algorithme recursif est simple a écrire, mais gourmand si tu a une arborescence trop profonde ( trop de dossier dans des dossier dans des dossiers). je ne parle pas du risque d'appel infinis (surtout si ta fonction get_elements_in_dir retourne le pseudo-dossier "." et "..")

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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