ubuntuusers.de

Zahlen aus HTML-Quellcode filtern

Status: Ungelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |

Izmir_Übül

Anmeldungsdatum:
23. Februar 2009

Beiträge: Zähle...

Hallo!

Ich möchte ein Shellscript schreiben, welches aus dem Quellcode einer HTML-Tabelle, die Datumsangaben und Realzahlen enthält, diese herausfiltert und in eine Textdatei schreibt. Welche Befehle würde man dafür sinnvollerweise benutzen (sed, awk ....)? Da ich Linux-Anfänger bin, habe ich noch nicht den Überblick, was wofür am besten geeignet ist.

Danke & Gruß

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Izmir Übül schrieb:

Ich möchte ein Shellscript schreiben, welches aus dem Quellcode einer HTML-Tabelle, die Datumsangaben und Realzahlen enthält, diese herausfiltert und in eine Textdatei schreibt. Welche Befehle würde man dafür sinnvollerweise benutzen (sed, awk ....)?

Eine Programmiersprache die einen HTML Parser hat.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Izmir Übül schrieb:

Hallo!

Ich möchte ein Shellscript schreiben, welches aus dem Quellcode einer HTML-Tabelle, die Datumsangaben und Realzahlen enthält, diese herausfiltert und in eine Textdatei schreibt.

Wie sind denn die Daten und Realzahlen formatiert? Alle nach Schema F oder gibt es da einen fröhlichen Wildwuchs? 09-02-23, 23. Feb. 2009, ...

Maduser

Avatar von Maduser

Anmeldungsdatum:
3. Mai 2005

Beiträge: 1238

Und hast du es mit vailden xhtml zu tun? Dann kann man mit xpath solche Sachen sehr schön machen.

svenXY

Avatar von svenXY

Anmeldungsdatum:
22. September 2008

Beiträge: 542

Wohnort: Heidelberg

Sid Burn schrieb:

Eine Programmiersprache die einen HTML Parser hat.

😎 und da Du heute mal keinen Vorschlag machst, welche Sprache sowas anbieten könnte, tue ich es für Dich/uns:

Perl hat sowas und es heisst (wenig überraschend)

HTML::Parser

http://search.cpan.org/~gaas/HTML-Parser-3.60/Parser.pm

Gruss, Sven

PS: Falls jemand es weiss: wie kann man denn einen Doppelpunkt und ein 'P' dahinter darstellen lassen, ohne dass es wie ein Sm,iley interpretiert wird???

Maduser

Avatar von Maduser

Anmeldungsdatum:
3. Mai 2005

Beiträge: 1238

Das habe ich irgendwann auch mal gefragt soll so gehen HTML::Parser

`:P`

(aber es passt nicht ganz von der Größe).

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Izmir Übül schrieb:

Ich möchte ein Shellscript schreiben, welches aus dem Quellcode einer HTML-Tabelle, die Datumsangaben und Realzahlen enthält, diese herausfiltert und in eine Textdatei schreibt. Welche Befehle würde man dafür sinnvollerweise benutzen (sed, awk ....)? Da ich Linux-Anfänger bin, habe ich noch nicht den Überblick, was wofür am besten geeignet ist.

Man kann xmllint --html --xmlout - verwenden, um eine HTML-Datei in XML umzuwandeln. Danach kann man mit xmlstarlet die Sachen herausfiltern, die einen interessieren.

Izmir_Übül

(Themenstarter)

Anmeldungsdatum:
23. Februar 2009

Beiträge: 19

user unknown schrieb:

Izmir Übül schrieb:

Hallo!

Ich möchte ein Shellscript schreiben, welches aus dem Quellcode einer HTML-Tabelle, die Datumsangaben und Realzahlen enthält, diese herausfiltert und in eine Textdatei schreibt.

Wie sind denn die Daten und Realzahlen formatiert? Alle nach Schema F oder gibt es da einen fröhlichen Wildwuchs? 09-02-23, 23. Feb. 2009, ...

Nein, ist schon einheitlich im Format TT.MM.JJ.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

xmllint --html --xmlout - | xmlstarlet pyx | grep "^-" | grep "[[:digit:]]{2}\.[[:digit:]]{2}\.[[:digit:]]{2}" --only-matching

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Izmir Übül schrieb:

Wie sind denn die Daten und Realzahlen formatiert?

Nein, ist schon einheitlich im Format TT.MM.JJ.

Und Realzahlen interessieren jetzt nicht mehr?

egrep -oh "[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9]" quelle.html > resultat.txt

würde Datums rauspicken, und in eine Datei schreiben, jedoch auch alles außerhalb von Tables.

So:

 
sed -n "/<table/,/<\/table/p" quelle.html | egrep -oh "[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9]" > resultat.txt

würde sed vorab alles herausfiltern, was zwischen <table und </table steht, allerdings ohne zu berücksichtigen, ob eines der oder beide Tags mit ←- auskommentiert ist.

Falls Hello Worlds Code bereits einen Filter auf HTML-Tabellen enthält bitte ich um Pardon. Wenn die Tabellen nie auskommentierte Tabellen enthalten ist der Code oben nicht schlecht.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Das mit den Tabellen hatte ich übersehen.

xmllint --html --xmlout - | xmlstarlet sel -t -m //table -v . | egrep -oh "[0-3][0-9]\.[0-1][0-9]\.[0-9][0-9]"

Man kann natürlich statt //table beliebige XPath-Ausdrücke angeben.

Antworten |