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
Python und reguläre Ausdrücke
- 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.
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.
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.
- 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.
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.
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.
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.
- 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!
Nur ist CSS ganz anders als HTML aufgebaut.Trotzdem kann auch dieses css gefunden werden und derselben Prozedur wie das Orginaldokument unterzogen werden.