[Python] Comment enlever les script?

dje-dje Messages postés 10442 Statut Modérateur -  
dje-dje Messages postés 10442 Statut Modérateur -
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 Statut Contributeur 32
 
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 33415 Statut Modérateur 15 663
 
Il y a une solution bourrin, mais qui marche très bien:

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

:-)
0
dje-dje Messages postés 10442 Statut Modérateur 758
 
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 33415 Statut Modérateur 15 663
 
Ah pardon !

htmlCode.Replace("<script ","<noscript ").Replace("</script>","</noscript>")
0
dje-dje Messages postés 10442 Statut Modérateur 758 > sebsauvage Messages postés 33415 Statut Modérateur
 
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 33415 Statut Modérateur 15 663 > dje-dje Messages postés 10442 Statut Modérateur
 
ah pardon... htmlCode est juste ta chaîne contenant le code HTML.
0
dje-dje Messages postés 10442 Statut Modérateur 758 > dje-dje Messages postés 10442 Statut Modérateur
 
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 33415 Statut Modérateur 15 663 > dje-dje Messages postés 10442 Statut Modérateur
 
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 10442 Statut Modérateur 758
 
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 33415 Statut Modérateur 15 663
 
.Replace("<script ","<noscript ").Replace("</script>","</noscript>").Replace("<script/>","<noscript/>")   


ça ne marcherait pas ?
0
dje-dje Messages postés 10442 Statut Modérateur 758 > sebsauvage Messages postés 33415 Statut Modérateur
 
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 33415 Statut Modérateur 15 663 > dje-dje Messages postés 10442 Statut Modérateur
 
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 10442 Statut Modérateur 758 > dje-dje Messages postés 10442 Statut Modérateur
 
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