ubuntuusers.de

Links aus html-quellcode auslesen - grep und sed

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

oidromom

Anmeldungsdatum:
16. März 2013

Beiträge: Zähle...

Hallo Leute,

ich hab folgendes Problem:

Ich hab einen HTML-Quellcode in dem ca 300 Links enthalten sind. Ich möchte diese separieren, damit ich am Ende ein txt-Dokument hab, in dem jede Zweile mit einem Link beginnt und danach endet. Folgender Befehl hat mir zumindest schonmal alle Zeilen heraussortiert, die einen Link enthalten:

cat sourcecode.txt | grep html > links.txt

Jetzt hab ich ein Dokument, in dem in jeder Zeile folgende Zeichenfolge steht:

</li><li data-large-img="http://www.beispiel1.com/content/usw/unf/beispiel1.jpg" data-medium-img="http://www.beispiel1.com/content/usw/unf/beispiel1_medium.jpg"

Da ist mir der Befehl sed in die Hände gefallen. Wenn ich den Teil </li><li data-large-img=" entfernen will, passiert leider gar nichts. Ich hab das versucht mit

sed s'/</li><li data-large-img="//g' links.txt > links2.txt

Also das funktioniert natürlich nicht. Und ich hab auch bisschen rumprobiert. Das einzige was geklappt hat, war das data-large-image noch wegzubekommen. Allerdings nie die </li><li selbst einzeln auskommentiert.

Wie kann ich das entfernen im gesamten Dokument? Ist dafür sed überhaupt hilfreich oder gibt es da noch bessere Tools? Freue mich über eure Hilfe!

PS: Ich hab das ganze auf dem ubuntu-basierten easypeasy linux 1.6 ausprobiert.

dirkolus

Anmeldungsdatum:
17. Mai 2011

Beiträge: 2178

Wohnort: dahoam

Moin & willkommen bei UU,

an sich ist sed genau das richtige Tool dafür, aber immer wenn ich probleme mit der Syntax habe, versuche ich zuerst cut. Das ist bei weitem nicht so mächtig, dafür einfacher zu handhaben.

Optionen:

  • -d ist der delimiter, also das Trennzeichen (hier ", muss aber markiert werden)

  • -f <n> ist das n.te Feld, welches für Dich interessant ist

Versuch mal folgendes:

cat DATEI | cut -d "\"" -f 2 > DATEI2

Wichtig: " ist hier gleichzeitig bei der -d Option der Begrenzer des Zeichens. Deswegen muss das Zeichen " zwischen den Begrenzern "..." maskiert werden → \"

Dirk

oidromom

(Themenstarter)

Anmeldungsdatum:
16. März 2013

Beiträge: 3

Moin Dirk!

Dein Befehl war exact das, wonach ich gesucht habe! Es hat auf Anhieb geklappt. Ich hab jetzt nur noch die reinen Links, einen pro Zeile. Was ich allerdings noch nicht ganz verstehe: das -f 2. Wieso 2? mit -d "\"" hab ich ihm doch gesagt, dass ich das will, was zwischen den Anführungsstrichen steht und dann ist von "http//www.blablabla.de/" das h das erste feld, oder nicht?

Man könnte ja jetzt ganz leicht ein Skript schreiben, welches alle Links aus dem Seitenquelltext ausliest. Erst mit grep http und dann mit cut.

Vielen vielen Dank!

NoKurth

Avatar von NoKurth

Anmeldungsdatum:
18. August 2006

Beiträge: 430

Hallo oidromom,

ich löse so etwas gerne auf folgende Art:

1
sed 's|"|\n|g' DATEI1 | grep "^http" > DATEI2

Erklärung:

  • sed: alle Anführungszeichen durch Zeilenumbrüche ersetzen

  • grep: alle Zeile mit "http" am Anfang ausgeben

Gruß
Norman

PS: grep, sed und cut können selbst Dateien lesen - da kannst du dir das "cat DATEI1 |" sparen...

dirkolus

Anmeldungsdatum:
17. Mai 2011

Beiträge: 2178

Wohnort: dahoam

oidromom schrieb:

Was ich allerdings noch nicht ganz verstehe: das -f 2. Wieso 2? mit -d "\"" hab ich ihm doch gesagt, dass ich das will, was zwischen den Anführungsstrichen steht und dann ist von "http//www.blablabla.de/" das h das erste feld, oder nicht?

Naja, nicht ganz: Mit -d "\"" sage ich, dass " das Trennzeichen meiner Felder sein soll, meine Zeile also so aussieht:

Feld 1"Feld 2"Feld 3"Feld 4

Damit gibt es vor dem ersten Trennzeichen auch noch ein Feld 1. Deswegen -f 2

NoKurth schrieb:

PS: grep, sed und cut können selbst Dateien lesen - da kannst du dir das "cat DATEI1 |" sparen...

Oh! Danke. Wieder was gelernt

Dirk

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Moin moin oidromom,

willkommen hier auf dem Forum !

dirkolus schrieb:

an sich ist sed genau das richtige Tool dafür,

Nee, das sehe ich anders.
Bei solchen Tag-orientierten Sachen wie HTML ist sed nur Pfusch !

Installier die HTML-XML-Utils, und nimm daraus hxwls !
Dann brauchst Du nur den nackten Aufruf: hxwls sourcecode.txt und fertig. - das ist dann sauber !

LG,

track

oidromom

(Themenstarter)

Anmeldungsdatum:
16. März 2013

Beiträge: 3

@alle:

Danke für die ausführlichen verständlichen Erklärungen und Tipps. Das mit HTML-XML-Utils werde ich mir gleich mal anschauen!

Tekzen

Anmeldungsdatum:
14. Mai 2017

Beiträge: 53

gibt es eine andere alternative als die erarbeitet Lösung? Ich wollte jetzt keinen neuen Thread aufmachen. Vorhaben: Webseite wird aufgerufen und über LIVE der Stream abgespielt, dieser ist mit token hinterlegt. UNTER view-source:http://livestreaml finde ich den Eintrag:

<script type="text/javascript">
    var options = {
        playerId : 'fx-player',
        playerType : 'live',
        autoplay : true,
        gaId : 'UA-5612274-1',
        video : [
           { desktop : [
               {
                   src : 'http://livestreaml/playlist.m3u8?token=452f1efd2d5634',
                   type : 'application/x-mpegURL',
               }
           ]},
 

Jetzt meine Frage hierzu wie kann ich über den quelltext den link auslesen?

Antworten |