[Python] Comment enlever les script?

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

4 réponses

  1. Contributeur
    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
    1. Modérateur
      Il y a une solution bourrin, mais qui marche très bien:

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

      :-)
      0
      1. Modérateur
        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
        1. Modérateur
          Ah pardon !

          htmlCode.Replace("<script ","<noscript ").Replace("</script>","</noscript>")
          0
        2. Modérateur
          @sebsauvageC'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
        3. Modérateur
          @dje-djeah pardon... htmlCode est juste ta chaîne contenant le code HTML.
          0
        4. Modérateur
          @dje-djeOk, 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
      2. Modérateur
        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
        1. Modérateur
          .Replace("<script ","<noscript ").Replace("</script>","</noscript>").Replace("<script/>","<noscript/>")   


          ça ne marcherait pas ?
          0
        2. Modérateur
          @sebsauvageReplace 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
        3. Modérateur
          @dje-djeoups !

          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
        4. Modérateur
          @dje-djeBah! 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