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 :

Récupérer des adresses sur Delicious


Sujet :

Python

  1. #21
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Tu as un art de danser autour du totem au lieu d’y planter direct la hache........

    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
    #!/usr/bin/env python
    #coding=utf-8
     
    import re,urllib,pprint
     
    url = 'http://delicious.com/projetmbc'
    pat = re.compile('<a\s+rel="nofollow"\s+class="taggedlink[\s"]+'\
                     +'href=("http://[^"]+")[\s>]+([^<]+)</a>')
     
    myDeliciousTag,cnt = {},0
    for nbPage in xrange(1,1000):
        content = urllib.urlopen(url + '/?page=' + str(nbPage)).read()
        myDeliciousTag.update(m.group(2,1) for m in pat.finditer(content))
        if len(myDeliciousTag)==cnt:  break
        else:  cnt = len(myDeliciousTag)
     
    prettyPrint = pprint.PrettyPrinter(indent = 2)
    print str(nbPage - 1) + ' page(s) opened.\n'
    prettyPrint.pprint(myDeliciousTag)

    Nota:
    - regrouper tous les imports ensemble sur une seule ligne
    - \n à la fin de ' page(s) opened.\n' économise une ligne

  2. #22
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut modif
    Finalement je préfère
    from pprint import PrettyPrinter
    et éliminer l’alias prettyPrint
    Il ne se justifierait que si plusieurs appels lui étaient faits.

    Fait nbPage in xrange(1000)
    au lieu de nbPage in xrange(1,1000)


    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
    #!/usr/bin/env python
    #coding=utf-8
     
    import re,urllib
    from pprint import PrettyPrinter
     
    url = 'http://delicious.com/projetmbc'
    pat = re.compile('<a\s+rel="nofollow"\s+class="taggedlink[\s"]+'\
                     +'href=("http://[^"]+")[\s>]+([^<]+)</a>')
     
    myDeliciousTag,cnt = {},0
    for nbPage in xrange(1000):
        content = urllib.urlopen(url + '/?page=' + str(nbPage+1)).read()
        myDeliciousTag.update(m.group(2,1) for m in pat.finditer(content))
        if len(myDeliciousTag)==cnt:  break
        else:  cnt = len(myDeliciousTag)
     
    print str(nbPage) + ' page(s) opened.\n'
    PrettyPrinter(indent = 2).pprint(myDeliciousTag)

  3. #23
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for nbPage in xrange(1000):
        content = urllib.urlopen(url + '/?page=' + str(nbPage+1)).read()
    Que de requêtes Web pour rien... Non ? Je n'ai pas le temps mais je pense que l'inspection du code HTML devrait donner un moyen simple de stopper la procédure. Mon code demande à être nettoyer mais bon dans l'état cela me convient.

  4. #24
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Euh....dis....tu crois vraiment que j’oserais faire une boucle de 1000 requêtes pour examiner 1000 pages web ?
    Non.
    J’ai mis 1000 pour faire large, avant que ton site ait 1000 pages on a le temps de voir venir.
    Mais le programme ne fait évidemment pas 1000 requêtes !

    Tu ne t’es pas demandé comment
    print str(nbPage) + ' page(s) opened.\n'
    arrive à afficher “2 page(s) opened.“ actuellement si nbPage sortait de la boucle avec la valeur 1000 ?

    Et tu n’as pas essayé de mettre une instruction
    print ’ouverture de la page ’+str(nbPage)
    dans la boucle pour suivre ce qui se passe effectivement ?

    Le compteur cnt prend pour valeur à la fin de chaque tour de boucle la longueur de myDeliciousTag quand cette dernière a changé,
    ce changement étant détecté par comparaison de la valeur de cnt avec laquelle le tour de boucle a commencé et de la longueur de myDeliciousTag aprés son update

    Sinon si cnt et len(myDeliciousTag) sont identiques, c’est qu’il n’y a aucun tag supplémentaire dans la page en cours et on peut arrêter la boucle des requêtes.

    Ainsi
    - à la fin du traitement de la page 1, cnt==0 et len(myDeliciousTag) ==10
    - à la fin du traitement de la page 2, cnt==10 et len(myDeliciousTag) ==18
    - à la fin du traitement de la page 3, cnt==18 et len(myDeliciousTag) ==18 et donc il y a arrêt de la boucle

    M'enfin !





    Il est vain de chercher un autre examen du contenu HTML de la page pour détecter la dernière page:
    la détection des tags est un examen en soi. Pas la peine de perdre du temps avec un test supplémentaire et différent.





    Mais je viens d’avoir l’idée d’un autre test pour arrêter tout de suite la boucle à la page 2, sans ouvrir la page 3.



    À+

  5. #25
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Mea culpa. J'étais sur ce code exemple et sur un autre pour gérer mes playlists cette aprèm d'où ma lecture en diagonal...

    Merci pour le code. Je l'adopte.

  6. #26
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    L’idée que j’avais pour essayer de stopper la boucle à la dernière page au lieu de devoir ouvrir une page dénuée de tout bookmark ne s’est pas révélée très bonne.

    Je m’étais dit qu’il suffisait de tester
    len(myDeliciousTag) % 10 .
    Tant qu’on n’examine pas la dernière page, cette valeur est 0.
    Dans la dernière page avec des Bookmarks, len(myDeliciousTag) % 10 devient différent de 0, parce qu’il n’y a pas le nombre maximal possible de Bookmarks dans la dernière page.
    Donc dès que len(myDeliciousTag) % 10 != 0 , on peut arréter la boucle.

    Mais tout ceci suppose qu’il y a bien un nombre constant et égal à 10 de Bookmarks par page.
    Et ce n’est valable que la plupart du temps mais pas toujours: il arrivera bien des moments où il y aura 10x Bookmarks dans x pages et on bouclera à l’infini.
    On peut faire des tests pour tenir compte des divers cas possibles, mais ça devient compliqué et insatisfaisant.

    J’ai laissé tomber.





    J’ai préféré chercher une autre manière de détecter la dernière page.
    Juste pour éviter de se trainer le compteur cnt et ouvrir une page de trop.

    Il suffit de détecter par regex s’il y a le bouton Next en bas de la page.
    J’ai testé diverses possibilités que je n’ai pas envie de détailler.
    À mon goût, la meilleure solution est la suivante:

    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
    #!/usr/bin/env python
    #coding=utf-8
     
    import re,urllib
    from pprint import PrettyPrinter
     
    url = 'http://delicious.com/projetmbc'
    patTag = re.compile('<a\s+rel="nofollow"\s+class="taggedlink[\s"]+'\
                     +'href=("http://[^"]+")[\s>]+([^<]+)</a>')
    patNext = re.compile('\?page=\d+" class="pn next">Next &gt;</a>')
     
    myDeliciousTag = {}
    for nbPage in xrange(1000):
        content = urllib.urlopen(url + '/?page=' + str(nbPage+1)).read()
        myDeliciousTag.update(m.group(2,1) for m in patTag.finditer(content))
        if patNext.search(content)==None:  break
     
    print str(nbPage+1) + ' page(s) opened.\n'
    PrettyPrinter(indent = 2).pprint(myDeliciousTag)
    Mettre un '?' comme premier caractère de la RE de la patNext permet d’éviter au moteur de regex de s’arrêter souvent dans le texte pour examiner si un '?' est suivi du motif recherché, parce qu’il n’y a jamais beaucoup de ’?’ dans un texte.

    Ce nouveau code prend 30% de temps de moins que le précédent.
    C’est normal, il n’ouvre plus que 2 pages web au lieu de 3, puisqu’il n’y a que 2 pages dans ton site pour le moment.

    Je crois que cette fois, c'est bon.

  7. #27
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par eyquem
    Il est vain de chercher un autre examen du contenu HTML de la page pour détecter la dernière page:
    la détection des tags est un examen en soi. Pas la peine de perdre du temps avec un test supplémentaire et différent.
    ...
    Il suffit de détecter par regex s’il y a le bouton Next en bas de la page.
    J’ai testé diverses possibilités que je n’ai pas envie de détailler.
    Te voilà bon pour un début de schizophrénie...
    Citation Envoyé par eyquem Voir le message
    Je crois que cette fois, c'est bon.
    Je pense que oui...

    Je viens de découvrir pyquery. Je vais essayer de voir si l'installation fonctionne sans souci sous Mac. Si c'est le cas je donnerais ici une version plus maléable...

  8. #28
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Par défaut
    Bonjour,

    Je sais que je ramène un peu ma fraise, mais un while n'aurait pas été mieux indiqué dans cette fameuse boucle ?

    Je dis ça, je dis rien .. c'est bon je sors

    Salutations.

  9. #29
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Oui, j’y ai pensé à ça, et je me suis dit que je ne devrais pas être si catégorique à certains moments.

    Mais comment s’engager sur une voie en négligeant une autre si on n’est pas convaincu de son idée ?

    C’et pour ça qu’il faut sans cesse soumettre à la critique tout ce qui est proposé, ainsi que soi-même.

    Et comme je ne suis pas assez bête pour ne pas changer d’avis, il m’arrive de sortir des trucs de schizophrènes pareils.

    PS
    remarque aussi que ma derrnière proposition me semble potable parce que la RE commence par un ’?’, comme je l’ai dit. Les autres solutions que j’ai essayées m’ont paru moins bonnes et inacceptables.

  10. #30
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Et comme je ne suis pas assez bête pour ne pas changer d’avis, il m’arrive de sortir des trucs de schizophrènes pareils.
    Ma remarque n'était pas méchante.

    Citation Envoyé par eyquem Voir le message
    PS
    remarque aussi que ma derrnière proposition me semble potable parce que la RE commence par un ’?’, comme je l’ai dit. Les autres solutions que j’ai essayées m’ont paru moins bonnes et inacceptables.
    En fait par portable, j'entendais quelque chose dans l'esprit de pyquery. Seul souci je n'arrive pas à l'installer sur mon Mac donc je ferais sans pour le moment (le problème vient de lxml).

  11. #31
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Voici un début de code avec la bibliothèque pyquery :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/env python
    #coding=utf-8
     
    # WARNING ! This script does not work with Python 3.
     
    # Here we use pyquery we have a very friendly interface, the one use by jQuery.
    import pyquery
    from pprint import PrettyPrinter
     
    myUrl = 'http://delicious.com/projetmbc'
    myDeliciousTag = {}
    nbPage = 0
     
    while True:
        nbPage += 1
        myPyquery = pyquery.PyQuery(url=myUrl  + '/?page=' + str(nbPage))
    # First step : we catch the h4 titles
        theH4Titles = myPyquery("h4")
     
    # Secund step : we catch the anchor <a class= "taggedlink">...</a>
        theAnchors = theH4Titles("a").filter('.taggedlink')
     
    # Third and last step; extraction of the infos...
    # TODO Try to use a more jQuery style...
        theAnchors = str(theAnchors).strip()
     
        if theAnchors:
            theAnchors = theAnchors.split('\n')
     
            for oneAnchor in theAnchors:
                i = oneAnchor.find('href="') + len('href="')
                oneAnchor = oneAnchor[i:]
                adress, name = oneAnchor.split('">')
                name = name.replace('</a>','')
                myDeliciousTag[name] = adress
        else:
            break
     
    PrettyPrinter(indent = 2).pprint(myDeliciousTag)
    La fin du code doit pouvoir mieux se faire avec pyquery mais là je n'ai pas trop le temps.

    PS : sous Mac, installer d'abord lxml via easy_instal via "STATIC_DEPS=true easy_install lxml" comme cela est indiqué sur le site. Ensuite il suffit d'installer pyquery via easy_install

  12. #32
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Pour montrer ce que j'entendais par portable, j'ai fait un autre exemple qui récupère le dernier numéro de version du logiciel CaRMetal, ainsi que la date de cette version :
    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
    24
    25
    26
    27
    28
    29
    30
    #!/usr/bin/env python
    #coding=utf-8
     
    # Source : http://www.developpez.net/forums/d861011/autres-langages/python-zope/general-python/recuperer-adresses-delicious
     
    # Here we use pyquery we have a very friendly interface, the one use by jQuery.
    import pyquery
     
    myUrl = 'http://db-maths.nuxit.net/CaRMetal/versions.html'
    myPyquery = pyquery.PyQuery(url=myUrl)
     
    # We catch  <td class="cell4">3.0.0</td>  and  <td class="cell4">24/08/09</td>.
    versionAndDate = myPyquery("td").filter('.cell4')
    versionAndDate = str(versionAndDate).split('\n')
    version, date = '', ''
     
    for oneInfo in versionAndDate:
        oneInfo = oneInfo.replace('<td class="cell4">', '')
        oneInfo = oneInfo.replace('</td>', '').strip()
     
        if version and date:
            break
     
        if version:
            date = oneInfo
        else:
            version = oneInfo
     
    print version
    print date
    Je pense que le code parle de lui-même.

  13. #33
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Je donne une version beaucoup plus "propre" du dernier code ci-dessus :
    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
    24
    25
    26
    27
    28
    #!/usr/bin/env python
    #coding=utf-8
     
    # Source : http://www.developpez.net/forums/d861011/autres-langages/python-zope/general-python/recuperer-adresses-delicious
     
    # Here we use pyquery we have a very friendly interface, the one use by jQuery.
    import pyquery
     
    myUrl = 'http://db-maths.nuxit.net/CaRMetal/versions.html'
    myPyquery = pyquery.PyQuery(url=myUrl)
     
    # We catch  <td class="cell4">3.0.0</td>  and  <td class="cell4">24/08/09</td>.
    versionAndDate = myPyquery("td").filter('.cell4')
    version, date = '', ''
     
    for oneInfo in versionAndDate:
        oneInfo = oneInfo.text_content()
     
        if version and date:
            break
     
        if version:
            date = oneInfo
        else:
            version = oneInfo
     
    print version
    print date
    Je vais essayer de faire de même pour la gestion des "delicious tags".

  14. #34
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Voilà pour finir ce post une version complètement "jQuery-like" de la recherche de mes "delicious tags".
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/env python
    #coding=utf-8
     
    # WARNING ! This script does not work with Python 3.
     
    # Here we use pyquery we have a very friendly interface, the one use by jQuery.
    import pyquery
    from pprint import PrettyPrinter
     
    myUrl = 'http://delicious.com/projetmbc'
    myDeliciousTag = {}
    nbPage = 0
     
    while True:
        nbPage += 1
        print 'Call of the page nb ' + str(nbPage) + '...'
        myPyquery = pyquery.PyQuery(url=myUrl  + '/?page=' + str(nbPage))
    # First step : we catch the h4 titles
        theH4Titles = myPyquery("h4")
    # Secund step : we catch the anchor <a class= "taggedlink">...</a>
        theAnchors = theH4Titles("a").filter('.taggedlink')
     
    # Third and last step : extraction of the infos...
        if theAnchors:
            for oneAnchor in theAnchors:
    # dir(...) has been used to find the following methods.
                adress = oneAnchor.get('href')
                name = oneAnchor.text_content()
                myDeliciousTag[name] = adress
        else:
            break
     
    PrettyPrinter(indent = 2).pprint(myDeliciousTag)
    pyquerry permet donc de faire les choses facilement pour peu que les infos cherchées répondent à certaines règles CSS et/ou HTML (ce qui est de plus en plus le cas pour les sites "bien faits").

  15. #35
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    bonjour,

    j'arrive après la bataille... mais as-tu essayé de récuperer et parser le flux RSS, cela semble plus simple, non?

    http://delicious.com/projetmbc devenant http://feeds.delicious.com/v2/rss/projetmbc?count=15
    ta liste de tag devient : http://feeds.delicious.com/v2/rss/tags/projetmbc?count=15

  16. #36
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par pacificator Voir le message
    j'arrive après la bataille...
    Pour une fois, je dirais tant mieux car cela m'a poussé à chercher et à trouver un peu par hasard pyquerry qui est très convaincant.

    Citation Envoyé par pacificator Voir le message
    mais as-tu essayé de récuperer et parser le flux RSS, cela semble plus simple, non?
    Je vient de jeter un oeil et cela ne semble pas si simple. Sur mon mac j'ai droit à des valeurs CSS du type "apple-..."

  17. #37
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Pour une fois, je dirais tant mieux car cela m'a poussé à chercher et à trouver un peu par hasard pyquerry qui est très convaincant.
    effectivement, je jeterais un coup d'oeil au besoin, m'étant déjà frotté à JQuery (simple et puissant) je pense que ça va me plaire.

    Pour ton problème, je te conseille d'installer le module feedparser et d'essayer simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import feedparser
    feed = feedparser.parse('http://feeds.delicious.com/v2/rss/tags/projetmbc?count=150')
    for entrie in feed.entries:
         print entrie['title']

  18. #38
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Je viens de faire le petit teste suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import feedparser
    feed = feedparser.parse('http://feeds.delicious.com/v2/rss/projetmbc')
    for entrie in feed.entries:
        print entrie['title']
    J'ai obtenu l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "/Users/cbal/Documents/myWorld/python/docUtiles/snippets/xml-html/infoOnTheWeb/myDeliciousTag_feedparser.py" 
    Traceback (most recent call last):
      File "/Users/cbal/Documents/myWorld/python/docUtiles/snippets/xml-html/infoOnTheWeb/myDeliciousTag_feedparser.py", line 10, in <module>
        print entrie['title']
    UnicodeEncodeError: 'ascii' codec can't encode character u'\u2002' in position 57: ordinal not in range(128)
    Donc les caractères spéciaux ne sont pas gérés par défaut. Sûrement pas de support de l'UTF-8. C'est dommage.

  19. #39
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    je n'ai pas ce problème chez moi, l'affichage est correcte, que ce soit directement en console ou non....

  20. #40
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Ok, le problème est résolu comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/env python
    #coding=utf-8
     
    # WARNING ! This script does not work with Python 3.
     
    # Hint done in the following page :
    import feedparser
    feed = feedparser.parse('http://feeds.delicious.com/v2/rss/projetmbc')
    for entrie in feed.entries:
        print entrie["title"].encode('utf-8')
        print entrie["link"]
    Génial, avec pyquerry j'ai de quoi parser des pages HTML via CSS, et maintenant j'ai accès à des flux RSS sans effort.

    Merci pour avoir pointé ceci.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Récupérer des Informations sur un PC via un Réseau ?
    Par MaTHieU_ dans le forum Administration
    Réponses: 6
    Dernier message: 22/11/2005, 12h39
  2. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22
  3. [servlet] Récupérer des infos sur le client
    Par kenito dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/09/2005, 18h08
  4. Récupérer des infos sur un AVI
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2003, 14h25
  5. Réponses: 6
    Dernier message: 28/09/2003, 17h49

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