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 :

construction d'expressions regulieres des urls


Sujet :

Python

  1. #21
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    wiztricks as tu une solution?

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par neila_ayari Voir le message
    j'ai installer le paquet wine qui permet d'executer les logiciels s'executant sous windows
    en linux
    j'ai ecrit le script et c'est bon j'ai comme resultat le code source
    aaaaahhhhhhh j'ai perdu 3 dizièmes dans chaque oeil !!

    désolé je n'ai pas résisté

    bonsoir,

    oui les phrases arrivent un peu dans le désordre mais je ne voulais pas paraître impoli.

    tu as un éditeur de texte pas trop mal sur Ubuntu: gedit. Tu lances la commandes gedit dans un terminal

    après tu peux installer les artilleries lourdes (eclypse+pydev, netbeans, ulipad...)

  3. #23
    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 neila_ayari Voir le message
    wiztricks as tu une solution?
    Si les informations que vous cherchez sont remontées dans la page, vous pouvez faire comme je l'ai raconté plus haut:
    • lecture de la page,
    • tri des urls qui vous intéressent,
    • mise en forme, affichage

    Ensuite, il faut trouver la bibliothèque qui fasse le maximum de boulot afin d'avoir le moins de lignes à écrire.

    Comme il falloir un peu plus que le contenu des balises "href" trouvées dans le HTML pour faire le tri et construire l'URL... Une bibliothèque sympa est mechanize - bon d'accord nous l'utilisons à minima -.

    La mise en oeuvre de tout çà pour un site/url est 'straightforward':
    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
    import os
    import mechanize as m
     
    #url = 'file://' + os.getcwd() + '/yahoo.html'
    url = 'http://fr.yahoo.com'
     
    def is_video(link):
        attrs = dict(link.attrs)
        return attrs['href'].find('video') >= 0 if 'href' in attrs else False
     
    br = m.Browser()
    # lecture de la page
    br.set_response(m.urlopen(url)) 
    # tri des urls qui vous intéressent,
    links = (link for link in br.links() if is_video(link)) 
    # mise en forme, affichage
    urls = [ link.url for link in links ]
    print '\n'.join([u for u in urls])
    En sortie çà donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    http://fr.video.search.yahoo.com/video
    http://fr.video.yahoo.com
    http://fr.news.yahoo.com/54/20100914/video/ven-a-c-est-du-strike-d34fe38.html
    http://fr.news.yahoo.com/54/20100914/video/ven-c-est-ce-qui-s-appelle-se-prendre-un-d34fe38.html
    http://fr.news.yahoo.com/54/20100913/video/ven-un-distributeur-automatique-bien-gnr-d34fe38.html
    La fonction is_video demande sans doute à être revue pour filtrer les 2 URLs en trop.

    Le traitement de chaque site demandera l'adaptation des opérations de la séquence - is_video est une de ces opérations.
    La question suivante est comment 'spécialiser' les opérations, tout en gardant la même structure dans le cas plusieurs sites.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #24
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    Je n’ai pas laissé tomber ce sujet, mais j’ai buté sur un problème inédit: la capture du code source de la page http://fr.yahoo.com ne capture pas ce que je capture à la main par un "clic droit/ Afficher la source"





    Quand la capture d’un code source par un programme marche, cela rend les choses assez simples.

    Je prends par exemple le site http://www.toppeo.com/
    Avec le code suivant, j’obtiens le code source sous une forme lisible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import urllib
     
    url = 'http://www.toppeo.com'
     
    sock = urllib.urlopen(url)
    ch_source = sock.read()
    sock.close()
     
    lg = 50
    with open('videos toppeo.txt','w') as f:
        f.write('\n'.join( str(n).rjust(4) + '   ' + repr(ligne[0:lg]) + ('','\n')[len(ligne)>50]+\
                           '\n'.join( '       '+repr(ligne[j:j+lg])
                                      for j in xrange(lg,len(ligne),lg)  )
                           for n,ligne in enumerate(ch_source.splitlines(1) ) ) )


    Sur la page http://www.toppeo.com/ , on fait ensuite "clic droit/ Copier le raccourci" sur une video
    On le colle dans un fichier texte pour voir un peu comment se présente ce lien. Par exemple:
    http://www.toppeo.com/video-b-soucis-faire-12894.html

    On fait un Ctrl-F pour chercher ce lien dans le code source mis en fichier. On ne le trouve pas.
    Mais en cherchant /video-b-soucis-faire-12894.html , on trouve deux occurences:

    172 '\t\t\t\t\t<a href="/video-b-soucis-faire-12894.html" cl'
    'ass="image"><img src="/files/thumb_98e9c7b180ab97d'
    '7756cd4e19bc360a3.jpg" width="133px" height="100px'
    '" alt="B\xe9yonc\xe9 a du soucis a se faire ?" /></a>\r\n'
    173 '\t\t\t\t\t<h2><a href="/video-b-soucis-faire-12894.html'
    '">B\xe9yonc\xe9 a du soucis a se faire ?</a></h2>\r\n'
    En répétant l’opération sur plusieurs liens videos dans la page http://www.toppeo.com/ , on ne trouve pas de format différent.
    Les liens paraissent donc tous être contenus partiellement dans des balises <a href="......html"

    Il suffit alors d'écrire une RE adaptée, et hop on chope tous les liens dans un code très court. Les liens étant présents deux fois, sur ce site, un petit traitement pour n’en retenir qu’un de chaque est nécessaire.

    Il suffira ensuite d’ajouter http://www.toppeo.com devant chaque portion de lien trouvée pour obtenir un lien fonctionnel.

    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
    import re,urllib
     
    RE ='<a href="(/[^"]+)(?<=\.html)'
    pat = re.compile(RE)
     
    url = 'http://www.toppeo.com'
     
    sock = urllib.urlopen(url)
    ch_source = sock.read()
    sock.close()
     
    li_href = []
    for ma in pat.finditer(ch_source):
        gr = ma.group(1)
        if not gr in li_href:
            li_href.append(gr)
     
    print '\n'.join(li_href)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /video-un-qui-pleure-parce-que-12897.html
    /video-david-guetta-ren-taupe-12896.html
    /video-move-your-body-12895.html
    /video-b-soucis-faire-12894.html
    /video-sono-20000-watts-dans-une-voiture-12893.html
    /video-stationnement-serr-12892.html
    /video-zapping-septembre-2010-12891.html
    /video-policiers-frappent-homme-terre-12890.html
    /video-une-vache-prend-fuite-avant-son-sacrifice-12889.html
    /video-le-plus-petit-monde-12888.html
    >>>


    Ça repose donc sur une analyse du code source à l’œil. Cette analyse et le codage de la détection peuvent être plus ou moins longs et pénibles. De plus, je ne sais pas comment on peut être assuré d’avoir vu tous les types de liens video dans une page et qu’aucun format nouveau n’échappera au code qu’on écrit. Je ne sais pas si tous les liens video qu'on peut trouver sur le net doievent respecter un standard minimum.

    Pour cette raison, ton code est intéressant, wiztricks, car mechanize fait peut être les mêmes choses de façon plus exhaustive et fiable.
    Mais je n'ai pas encore regardé de près. Quand je m’étais intéressé à mechanize, il m’avait paru compliqué et long à maîtriser, j’avais préféré apprendre les regex pour me débrouiller tout seul. Je vais essayer de le regarder.

  5. #25
    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 eyquem Voir le message
    Pour cette raison, ton code est intéressant, wiztricks, car mechanize fait peut être les mêmes choses de façon plus exhaustive et fiable.
    Lorsqu'un browser charge le contenu du document à l'URL machin, il ne se contente pas de faire http GET /machin. Qu'est ce qu'on interprête ou pas - et charge en plus - c'est compliqué et mechanize fait "mieux" que... Mais,
    certains sites doivent 'bouger' via du JS et remonter des URL en exécutant du JS... Dans ce cas, il faut encore une autre artillerie.

    Pour l'instant, elle n'est pas nécessaire.
    Le code que j'ai posté est très "bourrin"...
    De toutes façons, comme il faut construire une moulinette site par site pour savoir ce qui est ou pas une lien vers une video et l'url associée, ses 'links' contiennent des informations intéressantes sur lesquelles s'appuyer.

    Mais je n'ai pas encore regardé de près. Quand je m’étais intéressé à mechanize, il m’avait paru compliqué et long à maîtriser, j’avais préféré apprendre les regex pour me débrouiller tout seul. Je vais essayer de le regarder.
    Ben les regex c'est bien mais pour faire la sélection, il faut du contexte et donc 'parser' le document HTML. Ce n'est pas impossible à faire, mais c'est beaucoup de boulot... pour refaire des machins déjà faits.

    Après la question est de savoir s'il est "plus simple" de faire un script par "site" que d'essayer de "faire tous les sites"...

    Le problème étant:
    - un script par site fait environ 100 lignes,
    - un script factorisé est du même ordre de grandeur, j'aimerai sensiblement "moins".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Problèmes des expressions régulières
    Par melmouj dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 07/07/2006, 10h59
  2. [RegEx] Expression régulière pour réduire des URL
    Par kivan666 dans le forum Langage
    Réponses: 6
    Dernier message: 11/06/2006, 21h39
  3. Réponses: 4
    Dernier message: 29/05/2006, 15h27
  4. [RegEx] simple expression reguliere de decoupage url
    Par reski dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2006, 18h47
  5. [RegEx] Expression reguliere extraire un param d une URL
    Par venomelektro dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2005, 17h28

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