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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Récupérer des adresses sur Delicious
    Bonjour,
    j'ai le code HTML suivant à repérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <a rel="nofollow"
    class="taggedlink "
    href="http://code.google.com/p/spyderlib/" >
        spyderlib -  Project Hosting on Google Code
    </a>
    Je voudrais mettre cela dans un dictionnaire du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myDeliciousTag["spyderlib -  Project Hosting on Google Code"]
    =
    "http://code.google.com/p/spyderlib/"
    Quelqu'un a-t-il une méthode toute simple à proposer ?

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    en utilisant une expression régulière ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import re
     
    adresse = '''<a rel="nofollow"
    class="taggedlink "
    href="http://code.google.com/p/spyderlib/" >
        spyderlib -  Project Hosting on Google Code
    </a>'''
     
    adresse = adresse.replace('\n',' ') #pour traiter une chaine sans saut de lignes
     
    pattern = re.compile(r'^<a .*href="(.*)".*>[ ]*(.*)</a>$')
    s = pattern.search(adresse)
    print s.groups()
    retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('http://code.google.com/p/spyderlib/', 'spyderlib -  Project Hosting on Google Code ')

  3. #3
    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
    Bonjour,


    regex

    Le seul problème est de savoir si tu veux récupérer uniquement ce lien, un certain nombre de liens ou tous les liens dans une page html. Et en fonction de quels critères un lien est désirable ou non, c’est à dire quels sont les éléments autour d’un lien désirable dans la page html qui permettent son repérage, avec la stabilité/variabilité de ces éléments.

    Par exemple, s’il faut remplacer "nofollow" par certains noms seulement ou n’importe quel nom,... tu le feras toi-même. Pour le moment je propose ceci à l’arrache:


    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
    import re
     
    d = {}
     
    ch = '''blablablalkjhkjjgdc
    <a rel="nofollow"
    class="taggedlink "
    href="http://code.google.com/p/spyderlib/" >
        spyderlib -  Project Hosting on Google Code
    </a>
    suiteblablabla'''
     
    RE = '<a rel="nofollow"\r?\n'\
         +'class="taggedlink "\r?\n'\
         +'href=("http:.+?") >\r?\n'\
         +' *([^\r\n]+?)\r?\n</a>'
     
    pat = re.compile(RE)
     
    print pat.search(ch).groups()
     
    d.update((pat.search(ch).groups(),))
     
    print
    print 'd =',d
    ('"http://code.google.com/p/spyderlib/"', 'spyderlib - Project Hosting on Google Code')

    d = {'"http://code.google.com/p/spyderlib/"': 'spyderlib - Project Hosting on Google Code'}


    Au passage:
    merci pour la correction de mon écriture hideuse des chaînes que tu m’as conseillée il y a quelques jours. J’adopte la forme ’''.....’'' . Jusqu’à ta remarque je n’avais pas compris comment fonctionnait cette forme et son intérêt, et ne m’y étais jamais intéressé de près.

    Cependant ici pour la définition de RE, obligation d’utiliser celle que j’ai utilisée, parce que je veux spécifier un caractère ’\r’ optionnel devant le ’\n’, de façon à rendre le code apte à traiter un texte dans lequel il y aurait aussi bien ’\r\n’ que ’\n’ comme fin de ligne possible.

  4. #4
    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
    Correctif

    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
    import re
     
    myDeliciousTag = {}
     
    ch = '''blablablalkjhkjjgdc
    <a rel="nofollow"
    class="taggedlink "
    href="http://code.google.com/p/spyderlib/" >
        spyderlib -  Project Hosting on Google Code
    </a>
    suiteblablabla'''
     
    RE = '<a rel="nofollow"\r?\n'\
         +'class="taggedlink "\r?\n'\
         +'href=("http:.+?") >\r?\n'\
         +' *([^\r\n]+?)\r?\n</a>'
     
    pat = re.compile(RE)
     
    u,v = pat.search(ch).groups()
     
    myDeliciousTag.update(((v,u),))
     
    print
    print 'myDeliciousTag =',myDeliciousTag

  5. #5
    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
    Merci. Effectivement je cherchais tous les liens . J'avais oublié de le dire.

    Je ferais ce soir, car là je dois bosser, une version avec le module http qui ira sur le net chercher la page.

  6. #6
    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
    Différence entre group() et groups():


    - groups()[0] n’est pas la chaîne matchante avec la totalité de la RE , comme c’est le cas pour group(0)
    groups()[0] est le premier groupe capturé

    - groups() ne permet pas de sélectionner plusieurs groupes. On peut écrire pat.search(ch).groups()[0] par exemple,
    mais pas pat.search(ch).groups()[0,1] et donc pas pat.search(ch).groups()[1,0]



    - group(0) équivaut à group() et renvoie la chaîne matchante totale c’est à dire matchant avec la RE dans son entier

    - Une RE qui capture 10 groupes permettra d’écrire
    pattern.search().group(2,5,1,10,9,6,7,9,2) par exemple (remarquer répétition de 2 et 9)
    Ici on utilise cette possibilité pour présenter à l’update un tuple dans l’ordre inverse de leur capture:
    pat.search(ch).group(2,1)



    J’ai remplacé la forme update((pat.search(ch).group(2,1),))
    par update([pat.search(ch).group(2,1)]) , moins étrange


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    RE = '<a rel="nofollow"\r?\n'\
         +'class="taggedlink "\r?\n'\
         +'href=("http:.+?") >\r?\n'\
         +' *([^\r\n]+?)\r?\n</a>'
     
    pat = re.compile(RE)
     
    print  pat.search(ch).group(2,1)
     
    myDeliciousTag.update([pat.search(ch).group(2,1)])
     
    print
    print 'myDeliciousTag =',myDeliciousTag

  7. #7
    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
    Le cod suivant me renvoie : " u,v = pat.search(ch).groups() AttributeError: 'NoneType' object has no attribute 'groups' "
    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
    #!/usr/bin/env python
    #coding=utf-8
    import re
    ch = """<a rel="nofollow" class="taggedlink " href="http://forum.ubuntu-fr.org/" >Forum Ubuntu-fr.org</a>"""
     
    print ch
     
    RE = '<a rel="nofollow"\r?\n'\
         +'class="taggedlink "\r?\n'\
         +'href=("http:.+?") >\r?\n'\
         +' *([^\r\n]+?)\r?\n</a>'
     
    pat = re.compile(RE)
     
    u,v = pat.search(ch).groups()
     
    myDeliciousTag.update(((v,u),))
     
    print
    print 'myDeliciousTag =',myDeliciousTag

+ Répondre à la discussion
Cette discussion est résolue.

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