[Python] Comment enlever les script?

Fermé
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 - 7 mai 2004 à 15:43
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 - 7 mai 2004 à 17:07
Bonjour,
je suis toujours dans mon parser HTML et je voudrais qu'il élimine TOUS les script qu'il rencontre. La raison principal étant que l'un deux est:

<script language="javascript>
Document.write("<Script language=VB ...")
</script>

Et que l'un des script de ce genre me genere un HTML mal formé.(Donc que je ne peux pas parser avec HTMLParser) Puis-je l'épurer avec une regexp.

J'ai essayé avec '<script.*?script.*?> mais ca ne va pas, car il prend la balise script généré dans le javascript avec celle ouvrant le javascript(J'ai donc la balise fermante du javascript qui est seule...)

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
A voir également:

4 réponses

JSS Messages postés 3745 Date d'inscription jeudi 22 avril 2004 Statut Contributeur Dernière intervention 17 décembre 2004 32
7 mai 2004 à 15:57
Bonjour ou Bonsoir,

Je connais pas le langage python mais je connais les regexp donc je vais t'apporter ma reponse (peut etre que ca pourra t'aider).
essaye avec : "<Script.*?</Script>.

Autre idée : dans les regexp il prend la plus petite expression pouvant integrer ton expression il te faudra peut etre adapte ton utilisation au cas du javascript et du coup faire :
1 eliminer les balises javascript
2 eliminer les balises scripts
(En 2 passes du coup).

Je pense pas que j'ai ete tres clair mais bon ...

J'attends ton feedback.

++

JSS
2
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
7 mai 2004 à 16:07
Il y a une solution bourrin, mais qui marche très bien:

htmlCode.Replace("<script ","<noscript ")

:-)
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757
7 mai 2004 à 16:18
D'abord merci pour votre aide!
Alors:
- la solution de seb me génère d'autres erreurs: le script vb n'est pas ouvert et fermé dans le même javascript; j'ai reverifié ce code que je dois parser et il sort un Document.write('</script/>'). Balise sur laquelle le Parser se plante... (J'ai vais peut-etre faire un tour d'épuration pour virer celle-là et refaire un test). Sinon, sur un exemple de HTML propre cela aurait convenu. (replace c'est dasn quelle lib?)
- JSS: comme je l'ai mis plus haut, je vais etre obligé de faire une deuxième "épuration" comme tu me suggérais de la faire. Je vais aussi tester ta méthode.

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
7 mai 2004 à 16:20
Ah pardon !

htmlCode.Replace("<script ","<noscript ").Replace("</script>","</noscript>")
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757 > sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019
7 mai 2004 à 16:23
C'est dans quel module htmlCode?
Merci

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655 > dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011
7 mai 2004 à 16:32
ah pardon... htmlCode est juste ta chaîne contenant le code HTML.
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757 > dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011
7 mai 2004 à 16:34
Ok, mais replace ca sort d'ou? (moi je fais un regexp.sub )

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655 > dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011
7 mai 2004 à 16:55
http://docs.python.org/lib/module-string.html

Le string.replace est beaucoup plus rapide que les expressions régulières. :-)
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757
7 mai 2004 à 16:26
En fait, le cochon qui génère ce code ferme ses script avec <script\> (un anti-slash) et même avec la regexp qui va bien, il ne me substitue pas le code :-(

regexp = re.compile('<script\>',re.IGNORECASE)
test = <script\>
regexp.sub('<script>',test)
-> il me laisse <script\>

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
7 mai 2004 à 16:33
.Replace("<script ","<noscript ").Replace("</script>","</noscript>").Replace("<script/>","<noscript/>")   


ça ne marcherait pas ?
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757 > sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019
7 mai 2004 à 17:00
Replace me remplace bien les \ que me laissait le traitement des regexp. (Désolé de t'avoir embeté, mais mon help(replace) m'envoyait boulé, alors je pensais qu'un autre module devait etre installé)

J'ai de quoi joué maintenant! :-)

Merci

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655 > dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011
7 mai 2004 à 17:06
oups !

Juste un truc: l'antislash est un caractère spécial:

Au lieu d'écrire .Replace("<script\>","<noscript\>")
tu dois écrire .Replace("<script\\>","<noscript\\>")
ou bien .Replace(r"<script\>",r"<noscript\>")
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757 > dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011
7 mai 2004 à 17:07
Bah! non...
Avec Replace, j'ai testé le slash et l'anti et il remplace tel que.
tandis qu'avec les regexp, ca ne passait pas...

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
0