Python und reguläre Ausdrücke

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
mc_mak
User
Beiträge: 9
Registriert: Freitag 4. August 2006, 11:17

Ich würde gerne mit Hilfe eines regulären Ausdrucks alle Verweise eines html-Dokuments gewinnen.
Dieser soll beispielsweise <a ..>, <img ..>, aber auch <background ..> - links erkennen. Der reguläre Ausdruck fängt also meiner Meinung nach mit " an und endet mit ". dazwischen ist die Pfadangabe, beginnend mit '/' oder auch '../'.
Die absoluten Pfade mit 'http:...' brauchen nicht erkannt zu werden.
Hat jemand eine Idee, wie man das implementieren könnte.

Viele Grüße.
mc
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Am besten gar nicht mit REs, sondern mit einem richtigen HTML-Parser.
mc_mak
User
Beiträge: 9
Registriert: Freitag 4. August 2006, 11:17

Hallo,

das hab ich schon versucht und das find ich noch schwieriger.
Oder hast du ein Beispiel parat, wie das funktionieren könnte. :?
BlackJack

Ich würde als Parser BeautifulSoup empfehlen.
mc_mak
User
Beiträge: 9
Registriert: Freitag 4. August 2006, 11:17

Erst mal vielen Dank für die Antwort.
Ich beschäftige mich schon eine Weile mit diesem Problem und setze BeautifulSoup auch ein, aber leider kann ich mit BeautifulSoup nicht alle links finden, die ich ändern möchte. Als Beispiel werden Links in Tags wie diesem:
'<td background="../images/main/main.png">'
von BeautifulSoup nicht gefunden bzw. man kann damit nicht jeden Link auf einer beliebigen Webseite finden. Deshalb kam ich auf die Idee mit den regulären Ausdrücken.
Für <a href und <img src funktioniert BeautifulSoup natürlich.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Also erstmal glaube ich nicht, dass es mit BeautifulSoup keine Möglichkeit gibt, an das "background"-Attribut von <td>s zu kommen.

Allerdings: <td background="..."> ist von jeglichem HTML-Standard weit entfernt.

Das Problem ist aber doch: Wenn du z.B. Hintergrundbilder auch erfassen wolltest, müsstest du ja zusätzlich auch das Stylesheet finden und parsen.
mc_mak
User
Beiträge: 9
Registriert: Freitag 4. August 2006, 11:17

Stimmt, wenn es im Quellcode steht, wäre dies ja möglich. Wenn es in einem entfernten css liegt, wird das zugegebenermaßen schwierig.
Trotzdem kann auch dieses css gefunden werden und derselben Prozedur wie das Orginaldokument unterzogen werden.
Bezüglich der Konventionen gebe ich dir natütlich vollkommen recht, aber leider sind so einige Webseiten zusammengemurkst und trotzdem sollen auch die untersucht werden.
Ich kam am Ende zum Schluss, dass es wohl nur mit regulären Ausdrücken gehen kann.
So etwas, wie das firefox-plugin scrapbook (http://amb.vis.ne.jp/mozilla/scrapbook/)
kann ich leider nicht programmieren, aber da ist es indirekt implementiert.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Reguläre Ausdrücke sind einem echten Parser immer unterlegen!
Trotzdem kann auch dieses css gefunden werden und derselben Prozedur wie das Orginaldokument unterzogen werden.
Nur ist CSS ganz anders als HTML aufgebaut.
Antworten