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 :

Vitesse d'importation de code source html avec Python (urllib.request, urlopen)


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Non-informaticien
    Inscrit en
    Août 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non-informaticien

    Informations forums :
    Inscription : Août 2013
    Messages : 37
    Par défaut Vitesse d'importation de code source html avec Python (urllib.request, urlopen)
    Bonjour,

    codant en Python, l'une de mes boucles utilise le module urllib.request pour importer des url puis les codes sources html des pages correspondant à ces url. Pour cela, j'utilise une fonction du style :

    import urllib.request

    with urllib.request.urlopen(adresse) as url:
    t = url.read()

    Et j'exploite ensuite t.

    Le problème est que cette méthode prend trop de temps à mon goût. Les pages html que j'importe correspondent souvent à des articles de presse avec quelques milliers de caractères (pour le texte en langage naturel), sans compter toutes les autres parties du code html qu'une page de blog/site de presse peut avoir.
    Le temps d'import varie de 1 à 10 secondes selon les url.

    Je voulais vous demander : quelle est, selon vous, la plus rapide méthode pour importer des codes sources html en Python à partir d'url? Faut-il utiliser un module différent de urllib.request ? Une autre fonction que urlopen ou read() ?

    Je vous remercie d'avance de vos réponses.

    Termirtau

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    content = urllib2.urlopen(url).read()
    sans avoir jamais remarqué de lenteur de chargement. En tous cas, pas différent du temps nécessaire pour ouvrir la page dans un navigateur.

    As-tu un exemple de page particulièrement lente à charger, qu'on essaye ?

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    urlopen() c'est pas un import, c'est une requête effectuée sur le réseau, si ça dure 10s c'est plus probablement la lenteur de ta connexion, la charge du serveur web, le chemin réseau etc. etc. et tu vas certainement avoir du mal à accélérer les choses comme Python n'y est sans doute pour rien

  4. #4
    Membre averti
    Homme Profil pro
    Non-informaticien
    Inscrit en
    Août 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non-informaticien

    Informations forums :
    Inscription : Août 2013
    Messages : 37
    Par défaut
    Bonjour,

    et merci de vos réponses.

    BufferBob, ce que tu dis m'a l'air plausible, car le temps d'exécution de ma boucle varie du simple au double selon le moment.

    VinsS, est-ce que urllib2 est un package à part entière, ou un autre nom de urllib.request ?

    Si tu veux un jeu d'url que j'ai lancées en boucle, en voici dix ci-dessous. L'exécution a pris 27 secondes chez moi, dont 1 environ pour les traitements hors urlopen() et read().

    http://www.latribune.fr/opinions/tri...nevitable.html
    http://fr.wikipedia.org/wiki/Krach
    http://fr.wikipedia.org/wiki/Krach_de_1929
    http://www.toupie.org/Dictionnaire/Krach_boursier.htm
    http://www.lepoint.fr/economie/la-su...1896817_28.php
    http://www.lefigaro.fr/conjoncture/2...h-boursier.php
    http://www.lepoint.fr/economie/krach...1897208_28.php
    http://lci.tf1.fr/lexique/le-krach-b...r-6627439.html
    http://www.huffingtonpost.fr/2015/01...n_6477512.html
    http://www.latribune.fr/opinions/tri...nevitable.html

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    J'ai essayé d'abord avec wget qui n'a chargé que deux pages:

    http://www.toupie.org/Dictionnaire/Krach_boursier.htm 1.737 Ko, 0 sec.
    http://www.latribune.fr/opinions/tri...nevitable.html 264 Ko 0,1 sec.

    Tout le reste erreur 404 ou 410

    Avec python 2 et urllib2.urlopen
    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
     
    def get_content2(url):
        return urllib2.urlopen(url).read()
     
    begin = time.clock()
    for url in URLS:
        content = get_content2(url)
        print('%s loaded, len: %s' %(url.split('/')[-1], len(content)))
    print('End at: %s' % str(time.clock()-begin))
     
    --------------------------------------------
    pourquoi-un-nouveau-krach-boursier-est-inevitable.html loaded, len: 264293
    Krach loaded, len: 81752
    Krach_de_1929 loaded, len: 77488
    Krach_boursier.htm loaded, len: 5416
    la-suisse-entre-tempete-financiere-et-krach-boursier-15-01-2015-1896817_28.php loaded, len: 244347
    20002-20150115ARTFIG00181-la-suisse-est-en-train-de-vivre-un-krach-boursier.php loaded, len: 161886
    krach-boursier-en-suisse-pour-les-francais-c-est-noel-en-janvier-16-01-2015-1897208_28.php loaded, len: 245493
    le-krach-boursier-6627439.html loaded, len: 95406
    suisse-krach-bourse-franc-monnaie_n_6477512.html loaded, len: 124725
    pourquoi-un-nouveau-krach-boursier-est-inevitable.html loaded, len: 264293
    End at: 0.09
    -----------------------------------------------
    Par contre python 3 et urllib.request me retourne une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Python 3.2.3 (default, Jun 18 2015, 21:46:42) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import urllib
    >>> urllib.request.urlopen('http://fr.wikipedia.org/wiki/Krach')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'request'
    Faudra que j'enquête là-dessus.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Avec Python 3.4 c'est mieux et il faut importer urllib.request.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    pourquoi-un-nouveau-krach-boursier-est-inevitable.html loaded, len: 264287
    Krach loaded, len: 81752
    Krach_de_1929 loaded, len: 77465
    Krach_boursier.htm loaded, len: 5416
    la-suisse-entre-tempete-financiere-et-krach-boursier-15-01-2015-1896817_28.php loaded, len: 244347
    20002-20150115ARTFIG00181-la-suisse-est-en-train-de-vivre-un-krach-boursier.php loaded, len: 161782
    krach-boursier-en-suisse-pour-les-francais-c-est-noel-en-janvier-16-01-2015-1897208_28.php loaded, len: 245493
    le-krach-boursier-6627439.html loaded, len: 95251
    suisse-krach-bourse-franc-monnaie_n_6477512.html loaded, len: 124727
    pourquoi-un-nouveau-krach-boursier-est-inevitable.html loaded, len: 264287
    End at: 0.065254

Discussions similaires

  1. Importer un code source avec Eclipse
    Par amibar dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/10/2012, 19h40
  2. Import le code source HTML dans QTP
    Par zizou85 dans le forum VBScript
    Réponses: 2
    Dernier message: 03/08/2011, 14h48
  3. Faire un parsing "rapide" sur le code source html de www.break.com
    Par Inquirer94 dans le forum Général Java
    Réponses: 3
    Dernier message: 27/03/2007, 12h33
  4. visualisation et code source html
    Par battle dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 28/12/2006, 19h00
  5. Exploiter Code Source HTML
    Par mxh77 dans le forum 4D
    Réponses: 12
    Dernier message: 13/12/2006, 10h45

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