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 :

parser une page HTML avec re.search()


Sujet :

Python

  1. #1
    Membre régulier Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Points : 95
    Points
    95
    Par défaut parser une page HTML avec re.search()
    Bonjour à tous,

    Avec urllib, j'arrive à obtenir une page HTML en string.
    Je veux en extraire un passage dont je sais qu'il est compris entre
    </Title> et <tr><td align="right">toto_end</td>


    J'ai fait une fonction qui me ramene la page en string,
    et une autre que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def cherche_passage(page):
        print page
        print type(page)
        passage = re.search('</title>(.*)<tr><td align="right">toto_end</td>', page)
        print passage
        print type(passage)
        passage = passage.group(1)
        print passage
    et là ça ne passe pas.
    ça me print bien la page
    le type c'est bien une string

    Mais le résultat de re.search est "none" alors que mes bornes y figurent bien.
    J'obtiens ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <html>
      <head>
    ... toute le page
    </html>
    <type 'str'>
    None
    <type 'NoneType'>
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 10, in cherche_synonyme
      File "<stdin>", line 8, in cherche_passage
    AttributeError: 'NoneType' object has no attribute 'group'
    >>>
    Alors que si je teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (re.search('</title>(.*)<tr><td align="right">toto_end</td>', '</title>blabla<tr><td align="right">toto_end</td>').group(1)
    j'ai bien

    Est-ce qu'il y a une solution simple pour palier à ce problème?
    Je pense que c'est un problème de retour à la ligne... Mais comment faire?

    J'ai essayé d'ajouter :

    de chaque côté de la variable page mais ça donne le même résultat...

    J'ai bien trouvé ce que vous avez mis en ligne :

    from HTMLParser import HTMLParser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MyHTMLParser(HTMLParser):
     
        def handle_starttag(self, tag, attrs):
            print "Encountered the beginning of a %s tag" % tag
     
        def handle_endtag(self, tag):
            print "Encountered the end of a %s tag" % tag
    Mais je n'y comprends rien...
    Je ne sais pas utiliser les classes...


    Je vous remercie d'avance, si vous pouvez me dépanner.

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Utilise BeautifulSoup

  3. #3
    Membre régulier Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    Merci pour ton aide.

    Je ne connais pas Beautifulsoup mais je regarderai! Merci beaucoup!

    Sinon, je viens de trouver une solution differente que voici si ça interesse qqn...

    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
    def cherche_passage(page):
        beginTag = "<h2>"
        endTag   = '<tr><td align="right">toto_end</td>'
        startPos = str(page).find(beginTag)
        while startPos > -1:
            endPos = page.find(endTag,startPos+1)
            if endTag == -1:
                break
            else:
                passage = page[startPos+len(beginTag):endPos]
                passage = re.sub("<br>","\n",passage)
                passage = re.sub ("<[^<>]+>" ,'', passage)
                print "\nTrouvé:",passage
                startPos = page.find(beginTag,endPos+1)
        return passage
    Merci à Sebsauvage.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Si tu tiens vraiment à utiliser les expressions régulières (coûteux pour une recherche aussi simple), le problème c'est que le (.*) ne prend pas les caractères de retour à la ligne. Pour contourner ça, il faut que tu compiles ton expression avec le "drapeau" re.DOTALL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    expr = re.compile('</title>(.*)<tr><td align="right">toto_end</td>', re.DOTALL)
    def cherche_passage(page):
        print page
        print type(page)
        passage = expr.search(page)
        print passage
        print type(passage)
        passage = passage.group(1)
        print passage

  5. #5
    Membre régulier Avatar de Mydriaze
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Points : 95
    Points
    95
    Par défaut
    D'accord!!

    MERCI BEAUCOUP!!

    Je vais garder le premier script alors. Mais je note précieusement toutes les infos que vous m'avez données car je ne connaissais pas du tout.

    merci à tous.

  6. #6
    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 Faut faire plus simple
    1)
    Dabord le diagnostic.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    search( pattern, string[, flags]) 
    ....Return None if no position in the string matches the pattern;....
    http://www.python.org/doc/2.5.2/lib/node46.html#l2h-400



    passage = re.search('</title>(.*)<tr><td align="right">toto_end</td>', page)
    PAS BON

    passage = re.search('</Title>(.*)<tr><td align="right">toto_end</td>', page)
    MARCHERA, je pense


    Python considère liste_b et Liste_b comme deux choses différentes
    tu te rappelles ?


    Ce n'est pas un problème de retour à la ligne. Avant de chercher des explications exotiques, il faut bien lire le compte rendu d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <type 'str'>
    None
    <type 'NoneType'>
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 10, in cherche_synonyme
      File "<stdin>", line 8, in cherche_passage
    AttributeError: 'NoneType' object has no attribute 'group'
    <type 'str'> c'est print type(page)
    None à la ligne suivante , c'est print passage
    alors que ce qui est attendu c'est quelque chose comme <_sre.SRE_Match object at 0x0147C2F8> quand il y a le patern, or tu SAIS qu'il y a le patern, donc il faut rester sur cette indication inatendue jusqu'à comprendre le twist.





    2) Tu dis que ta page est dans un string. Je suppose que tu l'obtiens par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sockhtml = urllib.urlopen(url)
    page = sockhtml.read()
    AMA ce n'est pas une bonne idée d'utiliser read() et de mettre ta page dans un string.
    Je te conseille de lire le message #15 dans la file
    http://www.developpez.net/forums/d59...ine-caractere/

    Je te conseille aussi le message 4 de la file
    http://www.developpez.net/forums/d54...quante-python/

    Je me cite pour ne pas avoir à répéter.






    3) Pour ce qui est de ton problème précisément, je te conseille aussi de lire la file suivante
    http://www.developpez.net/forums/d62...robleme-regex/
    dans laquelle j'ai commis un autre message concernant la problématique regex/or not regex ?

    Comme tu risques de n'y pas aller, je te file le tuyau: regarde la fonction partition() qui agit sur des strings, elle va plus vite que l'utilisation de regex.






    4) En complément de la précédente référence que je te donne, je te signale que j'ai complété le test de vitesse dont il est question dans les messages #6 et #7 de cette file par la comparaison 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    x = "Le vicomte François-René de Chateaubriand est issu d'une très vieille famille aristocratique"
     
    from time import clock
     
    ct = 100000
    t0 = clock()
    print x[x.find('vicomte ')+8:x.find(" est issu d'une")],"    FIND"
    while ct:
        y = x[x.find('vicomte ')+4:x.find(" est issu d'une")]
        ct-=1
    print clock() - t0
     
    print
     
    ct = 100000
    t0 = clock()
    print x.partition('vicomte ')[2].partition(" est issu d'une")[0],"     PARTITION()"
    while ct:
        y = x.partition('vicomte ')[2].partition(" est issu d'une")[0]
        ct-=1
    print clock() - t0
     
    print
     
    ct = 100000
    t0 = clock()
    print x[11:41],"     x[11:41]"
    while ct:
        y = x[11:41]
        ct-=1
    print clock() - t0

    qui montre que l'utilisation de find() est plus longue elle aussi que partition().






    5) Il y a une erreur dans ton code
    Écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if endPos == -1:
                break
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if endTag == -1:
                break


    6) Voir aussi message #4 de la file suivante
    http://www.developpez.net/forums/d54...quante-python/





    En résumé, AMA:
    mets ta page en liste par read().splitlines(), utilise les méthodes de string au lieu des regex, utilise partition().

    Avec tout ça, je pense modestement que ton problème devrait devenir très simple.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Ce n'est pas un problème de retour à la ligne. Avant de chercher des explications exotiques, il faut bien lire le compte rendu d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <type 'str'>
    None
    <type 'NoneType'>
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 10, in cherche_synonyme
      File "<stdin>", line 8, in cherche_passage
    AttributeError: 'NoneType' object has no attribute 'group'
    <type 'str'> c'est print type(page)
    None à la ligne suivante , c'est print passage
    alors que ce qui est attendu c'est quelque chose comme <_sre.SRE_Match object at 0x0147C2F8> quand il y a le patern, or tu SAIS qu'il y a le patern, donc il faut rester sur cette indication inatendue jusqu'à comprendre le twist
    Ou alors le </Title> était une faute de frappe...
    Ce qui est attendu, bien sûr c'est un match object, si toi tu sais que le motif y est, tant mieux, mais je dis qu'un retour à la ligne n'est par défaut pas pris en compte par un "." dans l'expression. De plus, son print page montre bien qu'il y a des retours à la ligne, et l'exemple sur une ligne qui fonctionne n'en comporte pas.

    Documentation Python
    '.'
    (Dot.) In the default mode, this matches any character except a newline. If the DOTALL flag has been specified, this matches any character including a newline.
    Finalement, dans tous les cas, lorsqu'on veut analyser du code HTML, il vaut mieux ignorer la casse, donc re.IGNORECASE peut s'avérer utile

  8. #8
    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 oiffrig
    Je me suis permis d'écrire
    Ce n'est pas un problème de retour à la ligne.
    parce que j'ai d'abord verifié que le code de Mydriase marchait bien si la chaine page passée en argument à search() contenait une succession de caractères détectable par la regex qu'elle indiquait '</title>(.*)<tr><td align="right">toto_end</td>'.
    Car je ne voyais pas d'erreur dans son code. N'étant pas habitué à lancer des search() ou match() sur des chaines parce que je travaille avec des lignes dans des listes, j'ai d'abord vérifié que je ne me trompais pas.
    Donc j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    page =  '</title>Tour Eiffel<tr><td align="right">toto_end</td>\nAlbert Camus,né le 7/10/1913\nà Mondovi'
     
    import re
     
    print page
    print type(page)
    passage = re.search('</title>(.*)<tr><td align="right">toto_end</td>', page)
    print passage
    print type(passage)
    passage = passage.group(1)
    print passage
    Ce qui marche, évidemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    </title>Tour Eiffel<tr><td align="right">toto_end</td>
    Albert Camus,né le 7/10/1913
    à Mondovi
    <type 'str'>
    <_sre.SRE_Match object at 0x020DB220>
    <type '_sre.SRE_Match'>
    Tour Eiffel
    Puis quand j'ai vu qu'avant son code elle donnait une borne </Title> , la conclusion logique la plus immédiate et simple s'est imposé à moi. Une fois pointé le défaut d'écriture, ça m'a tellement semblé évident que je n'ai pas donné mon essai.







    Ou alors le </Title> était une faute de frappe...
    Oui bien sûr, on pourrait toujours se faire des réflexions comme celle ci mais alors on n'en finirait pas. Donc a priori, je me fonde sur ce qu'écrit un forumeur dans son message. Quand il faut faire trop de suppositions et d'interprétations pour avoir l'impression de comprendre un message, je m'en détourne.

    Je ne dis pas que moi je sais qu'il y a le patern. J'écris
    or tu SAIS qu'il y a le patern,
    parce que c'est bien elle qui écrit:
    le résultat de re.search est "none" alors que mes bornes y figurent bien.
    J'imagine aussi que quand Mydriase teste son programme, elle fait comme j'ai fait dans son cas: elle le fait en le lançant sur une page html dont elle a vérifié préalablement qu'elle contient ce qu'il est destiné à trouver. Elle ne va pas s'amuser à tester l'efficacité de son programme sur une page où elle ne trouvera rien......
    Par contre je commets une erreur en disant qu'il y a le pattern dans la page html. Je devrais écrire «Il y a une chaine qui MATCH le pattern dans la page».




    Bon, arrivé là, je me demandais comment elle avait pu passer à coté de cette explication et aller en chercher une du coté des retours à la ligne... Je ne voyais pas le rapport.
    Donc je lui ai indiqué, succintement, qu'en prenant bien en compte le message d'erreur, elle ne se serait pas embarqué à chercher des explications exotiques.
    Ceci ne s'adressait pas à toi, oiffrig, mais uniquement à elle. Je me doute bien que comme tu dois être 4000 fois meilleur que moi en Python, tu sais comment procéder pour corriger un bug.
    C'est bien pour elle seulement que j'indiquais au passage que la réussite de search() crée un MatchObject, parce qu'il me semble que comprendre la logique de la procédure du module re est important, chose qui m'a pris du temps personnellement, alors si je peux lui permettre d'être plus rapide, je le fais même si j'en dis trop.








    Quant au fond du problème, je ne vois toujours pas ce que les retours à la ligne viennent faire là dedans.
    Tu écris
    son print page montre bien qu'il y a des retours à la ligne, et l'exemple sur une ligne qui fonctionne n'en comporte pas.
    C'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (re.search('</title>(.*)<tr><td align="right">toto_end</td>', '</title>blabla<tr><td align="right">toto_end</td>').group(1)
    Ben, c'est bien sensé marcher sur cet exemple, non ?
    Comme il n'y a pas de retour à la ligne, ça ne prouve justement pas que les retours à la ligne sont impliqués dans le problème de Mydriase.



    Par contre quand je fais
    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
    page1 =  '</title>Tour Eiffel<tr><td align="right">toto_end</td>\nAlbert Camus,né le 7/10/1913 à Mondovi\n'
    page2 =  '</title>Tour Eiffel<tr><td al\nign="right">toto_end</td>\nAlbert Camus,né le 7/10/1913 à Mondovi\n'
    page3 =  '</title>Tour\n Eiffel<tr><td align="right">toto_end</td>\nAlbert Camus,né le 7/10/1913 à Mondovi\n'
    
    import re
    
    page1 = re.search('</title>(.*)<tr><td align="right">toto_end</td>', page1)
    print page1
    print page1.group(1)
    
    print
    
    page2 = re.search('</title>(.*)<tr><td al\nign="right">toto_end</td>', page2)
    print page2
    print page2.group(1)
    
    print
    
    page3 = re.search('</title>(.*)<tr><td align="right">toto_end</td>', page3)
    print page3
    print page3.group(1)
    j'obtiens


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <_sre.SRE_Match object at 0x0213B160>
    Tour Eiffel
     
    <_sre.SRE_Match object at 0x0220DF20>
    Tour Eiffel
     
    None
    Traceback (most recent call last):
      File "E:\Python\Essais Python\catena.py", line 21, in <module>
        print page3.group(1)
    AttributeError: 'NoneType' object has no attribute 'group'
    Ce qui montre qu'une succession de caractères qui comporte \n ne se matche pas avec la regex (.*) mais qu'elle se matche si elle est en dehors de la zone que doit représenter cette regex (.*)




    Je n'ai pas dit qu'il est faux d'écrire
    un retour à la ligne n'est par défaut pas pris en compte par un "." dans l'expression.
    Mais après les essais ci-dessus, je dis que même s'il y a des \n en dehors de la zone de texte que veut détecter Mydriase, ils ne perturbent pas la détection, et que je ne vois pas quel est le rapport des retours de ligne avec le problème de Mydriase.

    Il est vrai que je suis parti de l'idée que la chaine allant de </Title> (ou </title> , elle nous dira) à <tr><td align="right">toto_end</td> est située sur une seule ligne du code source de sa page html.
    C'est vrai que c'est une pure supposition et que j'aurais dû demander d'abord confirmation de ce fait.




    Jje suis déçu d'être critiqué par quelqu'un de beaucoup plus compétent que moi en Python, c'est absolument évident, alors que j'ai pris la peine de répondre à Mydriase de façon un peu longue parce que je pense le faire de façon valable sur ce sujet circonscrit
    et que j'ai estimé que
    - tu ne détournes pas suffisamment Mydriase d'une voie qui me semble à moi bien compliquée (tu dis juste sans insister que les expressions régulières sont coûteuses pour une recherche aussi simple )
    - GnuVince lui dit sans autre explication de s'intéresser à BeautifulSoup qui ne se prend quand même pas en main en 5 minutes,
    - sebsauvage lui a proposé une solution trop tarabiscotée relativement au problème
    Moi je vois son problème avec les yeux de quelqu'un qui est à peine sorti du stade de débutant et je me suis dit que Mydriase serait peut être intéressée de voir son problème placé dans un contexte plus large et soulagée de savoir qu'il peut se résoudre en deux coups de cuiller à pot sans avoir à s'enferrer dans la prise en compte des \n (si c'est bien le cas) et sans utiliser de regex.

    Maintenant, si je raconte vraiment n'importe quoi, il faut me le dire et j'attendrai d'être bon en Python aussi pour le faire, mais ça va me prendre sans doute une douzaine d'années.



    Je ne prétends pas savoir ce qu'il y a véritablement dans le code de Mydriase et sa page html, j'ai simplement apporté la réponse qui m'est venu à l'esprit à partir des éléments qu'elle a elle même donnés dans son message.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    On est bien d'accord. Je précisais juste que ce n'était pas la seule cause, et que concernant les regex, c'est une erreur courante d'oublier que par défaut le "." n'inclut pas les retours à la ligne.

    Citation Envoyé par eyquem Voir le message
    Oui bien sûr, on pourrait toujours se faire des réflexions comme celle ci mais alors on n'en finirait pas. Donc a priori, je me fonde sur ce qu'écrit un forumeur dans son message. Quand il faut faire trop de suppositions et d'interprétations pour avoir l'impression de comprendre un message, je m'en détourne.
    Là aussi, je suis d'accord, mais, pour moi, c'était une faute de frappe, étant donné que ses tests ne comportent pas de majuscule à </title>, et qu'en plus, sur un ordinateur portable avec un clavier français, le / nécessite une majuscule, je me suis donc permis de supposer que la majuscule n'y était pas. Et comme je l'ai dit, dans tous les cas, HTML est insensible à la casse donc il vaut mieux faire quelque chose d'insensible aussi.

    Citation Envoyé par eyquem Voir le message
    Je ne dis pas que moi je sais qu'il y a le patern.
    C'était simplement pour dire que les apparences sont parfois trompeuses, j'avais souvent ce comportement vis-à-vis du problème du "." et je ne comprenais pas pourquoi ça ne marchait pas.

    Citation Envoyé par eyquem Voir le message
    Donc je lui ai indiqué, succintement, qu'en prenant bien en compte le message d'erreur, elle ne se serait pas embarqué à chercher des explications exotiques.
    Bien sûr, mais si on débute avec les regex, c'est une erreur courante, et de plus quand match ou search renvoient None alors qu'on s'attend à un résultat, il peut y avoir beaucoup de problèmes différents dans le pattern

    Citation Envoyé par eyquem Voir le message
    Ceci ne s'adressait pas à toi, oiffrig, mais uniquement à elle. Je me doute bien que comme tu dois être 4000 fois meilleur que moi en Python, tu sais comment procéder pour corriger un bug.
    Toutes mes excuses, je pensais que tu t'adressais à moi dans ce passage.
    Je ne prétends pas être meilleur que toi en Python, on est tous là pour s'entraîder et apprendre les uns des autres, c'est simplement que j'ai eu du fil à retordre avec les regex, et que je commence à connaître les fautes courantes qui passent souvent inaperçues.

    Concernant les retours à la ligne, c'est simplement un comportement particulier du méta-caractère ".", qui par défaut s'arrête avant, sauf si on est en mode DOTALL. Du bout de code HTML qui a été transmis j'en ai déduit qu'il y avait peut-être des retours à la ligne dans ce qu'il fallait récupérer, auquel cas l'erreur aurait effectivement été celle-là.

    Sur ce, désolé si ma réponse t'a semblé un peu violente, ce n'était pas mon but, je voulais simplement clarifier le problème.

    Sur ce, le problème est résolu, le débat est clos, si tu tiens à continuer, on en reparlera par MP.

  10. #10
    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 bon ça va mieux comme ça. Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je ne prétends pas être meilleur que toi en Python
    Bon d'accord, on va dire seulement 3000 fois alors.
    mais moi j'affirme que je suis bien moins bon que toi et les autres dont je vois des messages auxquels je ne com-prends-rien !
    J'en fais pas une maladie, je constate seulement.
    Si j'ai le sentiment d'une telle distance entre moi et les chevaux de course qui sont partis avant moi, ça veut dire aussi que le langage Python est d'une richesse incroyable, et je m'en réjouis plutôt.


    Concernant ta remarque sur "." et DOTALL, je l'ai bien notée pour le futur, et je l'ai pris comme point de départ pour m'intéresser à des choses que je n'avais pas creusées jusqu'à présent. J'ai fait des tests, dont je n'ai pas parlé parce que ça n'est pas en rapport avec le problème de Mydriase, mais j'ai exploré un peu les modes et drapeaux. Merci pour le tuyau. Pas eu à m'en soucier jusque maintenant parce que je travaille sur des listes et les \n ne m'ont jamais posé de problème parce qu'ils sont touours en bout de chaine par définition.


    Pas de MP pour moi parce qu'il n'y a pas motif à débat, à part des discussions de confrontations d'expériences et de points de vue sur le langage Python qu'accueille le forum.

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

Discussions similaires

  1. Parser une page HTML avec Simple html dom parser
    Par thelover2fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/05/2012, 13h26
  2. parser une page html avec perl
    Par fedodido dans le forum Langage
    Réponses: 1
    Dernier message: 16/03/2009, 13h36
  3. Parser une page HTML avec du PHP
    Par Richard_Rahl dans le forum Langage
    Réponses: 9
    Dernier message: 19/08/2008, 15h36
  4. Réponses: 7
    Dernier message: 14/09/2005, 10h50

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