Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

urllib, decryptage du code, redefinition

1 réponse
Avatar
R12y
Bonjour,
Dans le but de récupérer le FQDN dans une page (X)HTML, je suis ce
tutoriel: http://www.boddie.org.uk/python/HTML.html
Il y a la définition d'une fonction start_a qui semble un peu sombre pour
moi:

Jusqu'à la ligne

[...]
print myparser.get_descriptions()
[...]

Je ne vois aucun appel à start_a(), pourtant si je commente la
définition de start_a(), alors le programme se comporte "mal":
La liste des url qui est censée être le resultat de la
manipulation reste vide (=[]).

Mais en gros c'est le fonctionnement de la machinerie que je ne comprends
pas:

- on stocke déjà la page à analyser dans une (longue) chaine de caractère.
Mais dans la classe MyParser, on la remange encore avec self.feed(). C'est
ça?
- chaque instance de MyParser a un attribut hyperlink, qui est une liste
de chaines de caractères. Oui, OK. Mais après je ne vois pas comment ça
fonctionne...

Un petit coup de main?


--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath=91&products_id=456

1 réponse

Avatar
bruno at modulix
R12y wrote:
Bonjour,
Dans le but de récupérer le FQDN dans une page (X)HTML, je suis ce
tutoriel: http://www.boddie.org.uk/python/HTML.html
Il y a la définition d'une fonction start_a qui semble un peu sombre pour
moi:

Jusqu'à la ligne

[...]
print myparser.get_descriptions()
[...]

Je ne vois aucun appel à start_a(),


Relis le tutorial, il y a une explication !-)

En bref : c'est la méthode feed() de SGMLParser qui provoque
(indirectement...) l'appel à start_a() (si cette méthode existe).
Consulte sgmllib.py, tu verra comment fonctionne l'affaire.

pourtant si je commente la
définition de start_a(), alors le programme se comporte "mal":
La liste des url qui est censée être le resultat de la
manipulation reste vide (=[]).


Normal, puisque c'est start_a() qui renseigne cette liste.

Mais en gros c'est le fonctionnement de la machinerie que je ne comprends
pas:

- on stocke déjà la page à analyser dans une (longue) chaine de caractère.
Mais dans la classe MyParser, on la remange encore avec self.feed(). C'est
ça?


SGMLParser.feed() prend le source à analyser (sous la forme d'une chaine
de caractères) et lance le parsing (methode SGMLParser.goahead(), et
diverses autres helper methods). Durant ce parsing, pour chaque tag,
s'il existe une méthode 'start_<nom_du_tag>', cette méthode est appelée,
avec en arguments la liste des attibuts du tag.

- chaque instance de MyParser a un attribut hyperlink, qui est une liste
de chaines de caractères. Oui, OK. Mais après je ne vois pas comment ça
fonctionne...


Comme tu a défini une méthode 'start_a()', cette méthode est appelée
quand le parseur tombe sur un tag '<a ...>'.

Un petit coup de main?


http://en.wikipedia.org/wiki/Simple_API_for_XML


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"