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

EOF in middle of construct avec HTMLParser

1 réponse
Avatar
FB
Bonjour

Pour certaines pages web, HTMLParser renvoit une erreur "EOF in middle
of construct" et arrete d'analyser la page.

Cela est du a des pages mal codees ou des choses comme ca apparaissent
par exemple :

<img src="xxx" height="10"width="15"/> (pas d'espace entre deux
attributs d'un tag)

J'aimerais cependant que HTMLParser puisse continuer de parser la page,
dans la mesure ou cela ne bloque pas le chargement de ces pages dans
les navigateurs.

J'ai donc pense au debut lancer une regex pour supprimer les tags qui
causeront probleme avant de passer les donnees a HTMLParser.feed() et
j'ai fait ca :

data = re.sub(r'<([a-z][^\s]*)\s[^>]*=[^\s=>]*=[^>]*>', '<\\1>', data)

(en gros, si dans un tag il y a une chaine avec plus d'un "=" sans
espaces, je vire le tag.)

Mais du coup ca me vire tous les tags a ou il y a un href du genre
href="index.php?a=1&b=2" ce qui est assez embetant puisque mon truc
doit pouvoir suivre les liens d'une page :)

Il faudrait donc modifier la regex pour lui dire de virer le tag sauf
si il s'agit d'un href... bref, je me vois pas faire ca. Ou trouver une
autre solution (peut etre je pourrais catcher l'erreur, et renvoyer au
parseur la suite de la page pour qu'il continue).

Si quelqu'un a une idee..

1 réponse

Avatar
FB
Pour info, j'ai identifie les trucs qui faisaient "planter" HTMLParser,
j'ai changé ma regex mais je ne suis pas satisfait, donc je pense que
je vais simplement reprendre la mehtode en question du HTMLParser dans
ma classe pour la rendre plus coulante et continuer le traitement des
données meme si les gens ont code leur html n'importe comment...

C'est quand meme enervant de devoir se casser le c pour ca :) ca
demande meme pas du html valide, mais les gens font n'importe quoi..

J'ai vu que d'autres avant moi ont eu ce soucis et l'ont signale au mec
qui a code HTMLParser, mais il a repondu a juste titre qu'il ne pouvait
pas s'agir d'un bug dans sa classe puisque coller deux attributs
ensemble dans un tag va a l'encontre de toutes les normes..

Enfin, il pourrait faire un effort vu que son truc n'a pas besoin a
priori de xml valide pour parser des donnees..