Seite 1 von 1

<script> blöcke aus HTML mit RegEx entfernen?

Verfasst: Freitag 11. April 2008, 13:04
von Kornelis
Hallo Zusammen,

da weder meine Google noch meine Forensuche mir den gewünschten Erfolg brachten, hoffe ich, dass ihr mir jetzt helfen könnt.

Ich möchte aus einer HTML Datei die Javascript Blöcke entfernen, leider finde ich die passende RegEx nicht, die mir genau den bereich zwischen <script ...>...</script> findet und entfernt. Das Prolbem ist, dass zwischen start und end Tag noch Zeilenumbrüche sind.

So sieht ein Script Block aus:

Code: Alles auswählen

	<script language="JavaScript">
	var mirando_cache=Math.floor(Math.random()*1000000);
	document.write('<scri'+'pt language="JavaScript" src="http://liefer.mirando.de/insert/2375/'+mirando_cache+'" ></scri'+'pt>');
	</script>
Hat jemand von euch eine Idee, wie die Regex dafür aussehen könnte?

Danke & Gruß

Kornelis

Verfasst: Freitag 11. April 2008, 13:10
von dennda
Muss es unbedingt ein regulärer Ausdruck sein?

Du könntest das mit einem Parser machen (BeautifulSoup o.ä.).

Verfasst: Freitag 11. April 2008, 13:20
von Kornelis
Grundlegend war es mein ziel, die HTML Datei mittels minidom zu parsen, allerdings hat der sich beschwert, dass das Dokument "not well formed" ist, mit der Begründung, invalid token, und das genau an der stelle wo das Javascript ist, also dachte ich mir, ist es vielleicht am einfachsten das Javascript vorher zu entfernen.

Ich beschäftige mich erst seit knapp 2 wochen mit Python und bin deshalb auch noch nicht ganz so firm, welche Möglichkeiten es da alles gibt.

Danke & Gruß

Kornelis

Verfasst: Freitag 11. April 2008, 13:21
von Leonidas
``'</scri'+'pt>'`` :?:

Nimm doch BeautifulSoup oder html5lib. HTML mit einem XML-Parser zu parsen ist recht aussichtslos. Damit es gültiges XML wäre, müsste man das JS mindestens in CDATA einpacken.

Verfasst: Freitag 11. April 2008, 13:28
von BlackJack
@Leonidas: Wenn das nicht wäre könnte man reguläre Ausdrücke ja gleich vergessen, weil man dann verschachtelte <script>-Tags erkennen müsste.

Verfasst: Freitag 11. April 2008, 13:30
von Leonidas
BlackJack hat geschrieben:@Leonidas: Wenn das nicht wäre könnte man reguläre Ausdrücke ja gleich vergessen, weil man dann verschachtelte <script>-Tags erkennen müsste.
Ja, ich wollte hervorheben, zu was für seltsamen Methoden man greifen muss, um das mit regulären Ausdrücken zu parsen. Kurz: "don't try this at home".

Verfasst: Freitag 11. April 2008, 13:30
von Kornelis
BlackJack hat geschrieben:@Leonidas: Wenn das nicht wäre könnte man reguläre Ausdrücke ja gleich vergessen, weil man dann verschachtelte <script>-Tags erkennen müsste.
Das Script baut ja werbebanner in die HTML Seite ein, ich vermute mal eher, die haben das so gemacht, dass man eben nicht direkt per Regex das Werbescript aus der Datei entfernen kann noch bevor man sie präsentiert.

Verfasst: Freitag 11. April 2008, 13:32
von Kornelis
Leonidas hat geschrieben:
BlackJack hat geschrieben:@Leonidas: Wenn das nicht wäre könnte man reguläre Ausdrücke ja gleich vergessen, weil man dann verschachtelte <script>-Tags erkennen müsste.
Ja, ich wollte hervorheben, zu was für seltsamen Methoden man greifen muss, um das mit regulären Ausdrücken zu parsen. Kurz: "don't try this at home".
Mir gehts ja darum, den äußeren <script> </script> block samt allem was dazwischen steht zu entfernen.

Aber danke für den hinweis mit den anderen Modulen, werde sie mir nachher mal zu gemüte führen.

Danke & Gruß

Kornelis

Verfasst: Freitag 11. April 2008, 13:52
von Leonidas
Der Vollständigkeit halber:

Code: Alles auswählen

>>> pattern = re.compile('<script.*?</script>', re.DOTALL)
>>> re.sub(pattern, '', s, re.DOTALL)
'     '

Verfasst: Freitag 11. April 2008, 15:02
von Kornelis
Ebenfalls der Ordnung halber:

Vielen Dank :D

Verfasst: Freitag 11. April 2008, 16:15
von jens
http://aspn.activestate.com/ASPN/Cookbo ... ipe/496942

Ich hatte letztens erst noch eine andere Version gefunden, die glaube ich besser was, aber nun ist es weg...