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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kornelis
User
Beiträge: 7
Registriert: Dienstag 8. April 2008, 06:54

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
Benutzeravatar
dennda
User
Beiträge: 17
Registriert: Montag 19. November 2007, 22:07

Muss es unbedingt ein regulärer Ausdruck sein?

Du könntest das mit einem Parser machen (BeautifulSoup o.ä.).
Kornelis
User
Beiträge: 7
Registriert: Dienstag 8. April 2008, 06:54

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``'</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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Kornelis
User
Beiträge: 7
Registriert: Dienstag 8. April 2008, 06:54

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.
Kornelis
User
Beiträge: 7
Registriert: Dienstag 8. April 2008, 06:54

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Der Vollständigkeit halber:

Code: Alles auswählen

>>> pattern = re.compile('<script.*?</script>', re.DOTALL)
>>> re.sub(pattern, '', s, re.DOTALL)
'     '
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Kornelis
User
Beiträge: 7
Registriert: Dienstag 8. April 2008, 06:54

Ebenfalls der Ordnung halber:

Vielen Dank :D
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten