Annonce

Réduire
Aucune annonce.

Aspirateur d'images Web en Python pour UNIX

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Aspirateur d'images Web en Python pour UNIX

    Bonjour,

    Suite à la demande de Sakarov concernant un aspirateur d'images sur un site web, j'ai créé mon propre aspirateur qui fonctionne en ligne de commande et que sous Unix.

    Systèmes:

    Tout systèmes Unix, allez savoir pourquoi, urlretrieve du module urllib.request bug, donc obligation d'utiliser wget d'Unix. J'essaierais le bas niveau pour éviter wget, mais plus tard.

    Les dépendances:

    La librairie lxml

    L'utilisation:

    Code:
    python3 wgetim.py http://www.google.fr /home/user/Down
    Attention il ne fait pas de récursion, je vais voir pour cela un peu plus tard.

    Le code:

    Code:
    import urllib.request
    import urllib.parse
    import platform
    import os
    import sys
    
    try:
        import lxml.html as lh
    except ImportError:
        if platform.mac_ver():
            down_url = "http://lxml.de/files/lxml-3.2.2.tgz"
        elif platform.linux_distribution():
            down_url = "download via synaptic lxml"
        else:
            sys.exit('program for Unix system')
        sys.exit('library lxml missing, {}'.format(down_url))
    
    def search(url):
        url_base = urllib.parse.urlparse(url).netloc
        data = urllib.request.urlopen(url)
        if data.code != 200:
            sys.exit('Error URL for {}'.format(url))
        doc = lh.fromstring(data.read())
        result = doc.xpath('//img/@src')
        list_urls = [url_base+address for address in result]
        return list_urls
    
    def main():
        URL = sys.argv[1]
        DIRECTORY = sys.argv[2]
        if os.path.isdir(DIRECTORY):
            os.chdir(DIRECTORY)
            liste = search(URL)
            for url in liste:
                print('Download of {}'.format(url))
                try:
                    os.system('wget {}'.format(url))
                except:
                    print('Error Download for {}'.format(url))
        else:
            try:
                os.mkdir(DIRECTORY)
                os.chdir(DIRECTORY)
                main()
            except OSError:
                sys.exit('Error, bad parameter for directory')
            
    
    main()
    Le code n'est pas optimisé, il est fait rapidement, si des cas ne sont pas fonctionnels, n'hésitez pas à le faire partager pour faire progresser le programme.

    En outre, des petites mises à jour d'optimisation seront faites lorsque le temps ne me manquera pas autant.

    Bonne journée/soirée....

  • #2
    je check ça tout à l'heure fred, j't'en ferai un retour
    sigpic

    Cyprium Download Link

    Plus j'étudie plus j'me rends compte que je n'sais rien.

    †|

    Commentaire


    • #3
      Je lance le script:
      Error: library lxml missing, http://lxml.de/files/lxml-3.2.2.tgz
      Je DL http://lxml.de/files/lxml-3.2.2.tgz
      Je le décompresse
      Je le place dans le dossier /Website/ qui sert à accueillir le site aspiré
      Je relance le script:
      Traceback (most recent call last):
      File "wgetim.py", line 49, in <module>
      main()
      File "wgetim.py", line 33, in main
      liste = search(URL)
      File "wgetim.py", line 23, in search
      doc = lh.fromstring(data.read())
      NameError: global name 'lh' is not defined

      Note: environment=osx
      Je vais pas trop insister car je sens que j'en ai pour un moment ^^
      On a parlera tout à l'heure si t'es dispo.
      PS : sorry for the late.
      sigpic

      Cyprium Download Link

      Plus j'étudie plus j'me rends compte que je n'sais rien.

      †|

      Commentaire


      • #4
        Pour installer lxml, tu peux utiliser pip qui normalement est installé avec python.

        Dans ta console tu tapes

        Code:
        pip3 install lxml

        Commentaire


        • #5
          En fait lxml n'est pas bien installé, le package html n'est pas trouvé, du coup lh n'existe pas...

          Dans ton dossier lxml décompressé, tu as des infos sur comment installer lxml sur mac OS.

          Bonne continuation...

          Commentaire

          Chargement...
          X