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 :

Comment lire une liste d'URL en Python ?


Sujet :

Python

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut Comment lire une liste d'URL en Python ?
    Bonjour,

    Pour lire une seule URL, j'ai un code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with urllib.request.urlopen(mon_url)as url:
        datas= json.loads(url.read().decode('utf8'))
        print(datas)
    J'ai une liste d'URL que je veux lire. J'ai donc essayé d'ajouter ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in liste:
        with urllib.request.urlopen(i)as url:
            datas= json.loads(url.read().decode('utf8'))
            print(datas)
    ce qui ne marche pas. Ma question est pourquoi ? Le i récupère bien les URL.

    Voilà l'erreur :

    Traceback (most recent call last):
    File "C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\mon_programme_FINAL.py", line 62, in <module>
    datas= json.loads(url.read().decode('utf8'))
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
    json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    Merci

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    datas= json.loads(url.read().decode('utf8'))
    Il ne me semble pas utile d'utiliser la méthode decode... As-tu testé sans cette méthode ?

    Je conseille d'utiliser requests, sympa il retourne le format json simplement, voir ce lien ICI .

    Après pour le problème, il peut y avoir plusieurs raisons,

    • un mauvais format en sortie du code HTML
    • un mauvais encodage sur un caractère incompatible
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par geeka Voir le message
    ce qui ne marche pas. Ma question est pourquoi ? Le i récupère bien les URL.
    Si vous supposez (sans le vérifier) que les url.read() retournent une chaîne de caractères au format JSON, json.loads en fera ce qu'il peut... et quand il ne peut pas, il plante.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> import json
    >>> json.loads('<>')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\py_env\py34-64\lib\json\__init__.py", line 318, in loads
        return _default_decoder.decode(s)
      File "C:\py_env\py34-64\lib\json\decoder.py", line 343, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "C:\py_env\py34-64\lib\json\decoder.py", line 361, in raw_decode
        raise ValueError(errmsg("Expecting value", s, err.value)) from None
    ValueError: Expecting value: line 1 column 1 (char 0)
    >>>
    note: par défaut, le serveur va retourner du HTML sauf si vous lui avez demandé autre chose et qu'il peut le fournir.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Il ne me semble pas utile d'utiliser la méthode decode... As-tu testé sans cette méthode ?

    Je conseille d'utiliser requests, sympa il retourne le format json simplement, voir ce lien ICI .

    Après pour le problème, il peut y avoir plusieurs raisons,

    • un mauvais format en sortie du code HTML
    • un mauvais encodage sur un caractère incompatible
    Merci pour ta réponse.
    Pour le decode, quand je l'enlève j'ai une erreur sur l'encodage ascii...
    UnicodeEncodeError: 'ascii' codec can't encode character '\xe7' in position 70: ordinal not in range(128)
    Merci pour le request, je l'ai vu, par contre il n'est pas valable pour la version 3.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Si vous supposez (sans le vérifier) que les url.read() retournent une chaîne de caractères au format JSON, json.loads en fera ce qu'il peut... et quand il ne peut pas, il plante.
    note: par défaut, le serveur va retourner du HTML sauf si vous lui avez demandé autre chose et qu'il peut le fournir.
    - W
    Merci pour ta réponse.
    Je ne comprends toujours pas
    si ce n'est pas url.read() qu'est-ce qu'il faut que je mette ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par geeka Voir le message
    si ce n'est pas url.read() qu'est-ce qu'il faut que je mette ?
    Il faut déjà regarder ce que le serveur a retourné lorsque çà plante.

    Ensuite il faut regarder comment construire sa requête HTTP pour dire au serveur de retourner un contenu au format JSON *s'il le peut*?
    Et dans tous les cas, savoir tester qu'il a bien retourné un contenu dans le format attendu.

    C'est de la technique HTTP indépendante du langage (le serveur ne sait pas que vous codez en Python). Vous pouvez testez vos requêtes avec un utilitaire mode ligne comme "curl": requêtes et réponses ne sont que du texte "structuré".
    Savoir ce qu'il faut mettre dedans et surtout tester que çà le fait est quelque chose qu'on ne peut pas faire à votre place (c'est quoi vous URL?). On peut juste vous aider à traduire en Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Ma liste d'URL est sous cette forme :
    liste = ["https://fr.wiktionary.org/w/api.php?action=query&titles=b'abraser'&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids=234324", "https://fr.wiktionary.org/w/api.php?action=query&titles=b'abrasser'&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids=2577483", "https://fr.wiktionary.org/w/api.php?action=query&titles=b'abrater'&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids=2577510", "https://fr.wiktionary.org/w/api.php?action=query&titles=b'abr\\xc3\\xa9agir'&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids=955516", "https://fr.wiktionary.org/w/api.php?action=query&titles=b'abr\\xc3\\xa9ger'&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids=137227", "https://fr.wiktionary.org/w/api.php?action=query&titles=b'abreuver'&prop=iwlinks&utf8&iwprefix=en&format=json&indexpageids=137230"]
    Finalement, j'ai ajouté le encode() au bon endroit et maintenant j'ai cette liste, avec le json correspond.
    Mais il reste un problème, dans les titles, j'ai un b' qui a été ajouté titles=b'abraser, et à cause de ça mon URL ne reconnait pas le title et ne peut pas donner les valeurs correspondantes en JSON.
    Comment je peux supprimer ce bytes ?

    Merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par geeka Voir le message
    Finalement, j'ai ajouté le encode() au bon endroit et maintenant j'ai cette liste, avec le json correspond.
    Mais il reste un problème, dans les titles, j'ai un b' qui a été ajouté titles=b'abraser, et à cause de ça mon URL ne reconnait pas le title et ne peut pas donner les valeurs correspondantes en JSON.
    Comment je peux supprimer ce bytes ?
    Si vous avez des b'...' c'est probablement parce que vous aviez des bytes... que vous avez voulu concaténer avec des strings, ce que Python n'aime pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> b'aaa' + 'bbb'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can't concat bytes to str
    >>>
    et vous avez pris la décision d'y pallier en appliquant str:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> str(b'aaa') + 'bbb'
    "b'aaa'bbb"
    >>>
    Et on se retrouve avec des b'...' qui poussent.

    Si vous vous contentez de faire n'importe quoi pour que Python ne râle plus, çà va péter un peu plus loin: normal...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    J'ai finalement changé les titles par des id, du coup je lis des entiers et je n'ai pas plus de problème de bytes.
    Je récupère mes données grâce à l'id.
    Merci pour votre aide

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Je reviens sur le sujet car finalement il y a un endroit du code où je dois transmettre des titles, donc j'ai encore le problème de bytes

    J'ai vu qu'on pouvait faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> b"abcde"
    b'abcde'
     
    # utf-8 is used here because it is a very common encoding, but you
    # need to use the encoding your data is actually in.
    >>> b"abcde".decode("utf-8") 
    'abcde'
    Ce qui ne marche pas chez moi :
    C'est le title1 qui contient le b' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    title1 = datas["query"]['pages'][i]["title"].decode("utf-8")
    print(title1)
    url1 = "https://en.wiktionary.org/w/api.php?action=query&utf8&prop=extracts&utf8&format=json&titles=%s" % (title1)
    with urllib.request.urlopen(url1)as url:
       datas= json.loads(url.read())
       print(datas)
    J'ai une erreur :
    AttributeError: 'str' object has no attribute 'decode'

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Dans le code que vous montrez title1 est déjà "b'qqqq'".
    La question est de savoir si c'était déjà sa valeur après la lecture de l'URL ou après quelle opération il a été transformé ainsi.
    A vous de remonter dans les étapes de vos traitements pour vérifier tout çà (en commençant par la lecture de l'URL).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Dans le code que vous montrez title1 est déjà "b'qqqq'".
    La question est de savoir si c'était déjà sa valeur après la lecture de l'URL ou après quelle opération il a été transformé ainsi.
    A vous de remonter dans les étapes de vos traitements pour vérifier tout çà (en commençant par la lecture de l'URL).

    - W
    J'ai fait un print du title1 avant et après la lecture, il est sous cette forme "b'qqqq'" avant et après, à moins que je n'affiche print(title1.decode("utf8") mais ça ne changera rien à l'URL. Si je mets avant l'URL j'ai une erreur et je dois absolument mettre encode et non pas decode :
    title1 = datas["query"]['pages'][i]["title"].encode("utf-8")

    Je ne vois pas quoi faire

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par geeka Voir le message
    J'ai fait un print du title1 avant et après la lecture, il est sous cette forme "b'qqqq'" avant et après, à moins que je n'affiche print(title1.decode("utf8") mais ça ne changera rien à l'URL. Si je mets avant l'URL j'ai une erreur et je dois absolument mettre encode et non pas decode :
    title1 = datas["query"]['pages'][i]["title"].encode("utf-8")
    Je ne vois pas comment vous pouvez faire un "print(title1)" avant de lire l'URL contenant le JSON duquel vous l'avez extrait....

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Je ne vois pas comment vous pouvez faire un "print(title1)" avant de lire l'URL contenant le JSON duquel vous l'avez extrait....

    - W
    Parce qu'en réalité au haut du code, j'ai un fichier qui contient tous les titles, donc je parcours les titles, puis je les trasmets par URL, et je dois encore lire cette URL avec le title qui va me donner un JSON.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #2) Lire le fichier JSON sous Python et le parser
            with fichier_json as fichier:
               data = json.load(fichier)      # load décode un fichier json
               #print (data)
     
            #3) Récupérer le title
            for datum in data['query']['categorymembers']:
                title1 = datum['title']

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par geeka Voir le message
    Parce qu'en réalité au haut du code, j'ai un fichier qui contient tous les titles, donc je parcours les titles, puis je les trasmets par URL, et je dois encore lire cette URL avec le title qui va me donner un JSON.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #2) Lire le fichier JSON sous Python et le parser
            with fichier_json as fichier:
               data = json.load(fichier)      # load décode un fichier json
               #print (data)
     
            #3) Récupérer le title
            for datum in data['query']['categorymembers']:
                title1 = datum['title']
    Et bien il faut déjà regarder comment est écrit 'title' dans ce fichier là.... Et s'il est de la forme b'title' s'inquiéter de comment vous l'avez fabriqué.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Et bien il faut déjà regarder comment est écrit 'title' dans ce fichier là.... Et s'il est de la forme b'title' s'inquiéter de comment vous l'avez fabriqué.

    - W
    Mes titles sont écrit normalement sans b'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"batchcomplete":"","continue":{"cmcontinue":"page|41444d4554545245|137641","continue":"-||extracts"},"query":{"categorymembers":[{"pageid":2781394,"ns":0,"title":"accravanter"},{"pageid":2556032,"ns":0,"title":"accrécher"},{"pageid":137462,"ns":0,"title":"accréditer"},{"pageid":2419774,"ns":0,"title":"accréter"},{"pageid":137388,"ns":0,"title":"accrocher"},{"pageid":997720,"ns":0,"title":"accrocheter"},{"pageid":137391,"ns":0,"title":"accroire"},{"pageid":147043,"ns":0,"title":"accroitre"},{"pageid":137401,"ns":0,"title":"accroître"},{"pageid":2471216,"ns":0,"title":"accroupetonner"},{"pageid":2570057,"ns":0,"title":"accroupiller"},{"pageid":137405,"ns":0,"title":"accroupir"},

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par geeka Voir le message
    Mes titles sont écrit normalement sans b'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"batchcomplete":"","continue":{"cmcontinue":"page|41444d4554545245|137641","continue":"-||extracts"},"query":{"categorymembers":[{"pageid":2781394,"ns":0,"title":"accravanter"},{"pageid":2556032,"ns":0,"title":"accrécher"},{"pageid":137462,"ns":0,"title":"accréditer"},{"pageid":2419774,"ns":0,"title":"accréter"},{"pageid":137388,"ns":0,"title":"accrocher"},{"pageid":997720,"ns":0,"title":"accrocheter"},{"pageid":137391,"ns":0,"title":"accroire"},{"pageid":147043,"ns":0,"title":"accroitre"},{"pageid":137401,"ns":0,"title":"accroître"},{"pageid":2471216,"ns":0,"title":"accroupetonner"},{"pageid":2570057,"ns":0,"title":"accroupiller"},{"pageid":137405,"ns":0,"title":"accroupir"},
    super... à partir de là, il vous reste à suivre les opérations que vous faites jusqu'à ce qu'ils deviennent b'...'

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  18. #18
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    super... à partir de là, il vous reste à suivre les opérations que vous faites jusqu'à ce qu'ils deviennent b'...'

    - W
    J'ai repris le code là où j'avais voulu transmettre le titles par URL et que j'ai changé en id, finalement je reprends le titles.
    Le problème est dans la lecture de l'url avec urllib.request, il n'accepte pas de lire un string avec des accents et des espaces, je ne peux pas transmettre un
    title avec sa structure normale.
    Quand j'essaie :
    url = "http://....&titles=%s" ("abalourdir) => ça marche

    url = "http://....&titles=%s" ("à-foner) => erreur d'encodage

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par geeka Voir le message
    J'ai repris le code là où j'avais voulu transmettre le titles par URL et que j'ai changé en id, finalement je reprends le titles.
    Le problème est dans la lecture de l'url avec urllib.request, il n'accepte pas de lire un string avec des accents et des espaces, je ne peux pas transmettre un title avec sa structure normale.
    Quand j'essaie :
    url = "http://....&titles=%s" ("abalourdir) => ça marche

    url = "http://....&titles=%s" ("à-foner) => erreur d'encodage
    Le codage des URL est défini par le W3C.
    Python permet au développeur de s'y conformer en proposant les bibliothèques qui vont bien.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  20. #20
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Points : 172
    Points
    172
    Par défaut
    Merci pour votre réponse.

    Je n'ai pas bien compris cette fonction, est-ce- qu'elle remplace urllib.request.urlopen ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment convertir une liste en matrice(Python)
    Par rosef dans le forum Général Python
    Réponses: 5
    Dernier message: 17/09/2013, 22h59
  2. [VB.Net] Comment lire une url depuis un fichier .ini ?
    Par lewebdalex dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/05/2006, 20h32
  3. Comment lire une partie du son *.wav
    Par ryosaebafr2000 dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2005, 16h00
  4. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46
  5. [PDFBox]Comment manipuler une LIST
    Par marcotop dans le forum Documents
    Réponses: 11
    Dernier message: 27/08/2004, 15h46

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