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:
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:
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:
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:
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... :oops:
Je ne sais pas utiliser les classes...
Je vous remercie d'avance, si vous pouvez me dépanner.
bon ça va mieux comme ça. Merci
Code:
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.