Forum: PC-Programmierung URLs aus HTML extrahieren


von dummy (Gast)


Lesenswert?

Manchmal möchte man sich das häufige Anklicken von Links zum Download 
ersparen; Plugins wie GetThemAll machen das. Manchmal möchte man dann 
die gefundenen Links noch bearbeiten.
Der erste Gedanke geht an grep, da das aber nur zeilenweise arbeitet, 
wird man enttäuscht.

Ich hätte also gerne ein Programm, dass einen regulären Ausdruck auf 
alle  URLs (bzw. href ="" Attribute, ggf. auch nur bestimmter Elemente) 
anwendet.

# <programm> "[0-9]+\.pdf" my.html > of.txt

# cat txt
http://domain.tl/dir/06.pdf
http://domain.tl/dir/7.pdf
../dir/2010.pdf

Hat jemand sowas parat?

von Lord Z. (lordziu)


Lesenswert?

dummy schrieb:
> Der erste Gedanke geht an grep, da das aber nur zeilenweise arbeitet,
> wird man enttäuscht.

Vielleicht hab ich jetzt Tomaten auf den Augen, aber woher nimmst du 
denn mehrzeilige URLs?

von dummy (Gast)


Lesenswert?

Gute Frage. Vielleicht habe ich das verwechselt und meinte eigentlich, 
dass grep die ganze Zeile ausspuckt, ich aber nur den/die Treffer haben 
möchte?
Ist schon etwas her, dass ich das konkrete Problem hatte.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da grep reguläre Ausdrücke verarbeitet, wirst Du wohl etwas am 
verwendeten regulären Ausdruck schrauben müssen, dann wird das schon.

von sebastians (Gast)


Lesenswert?

nein, mit grep wirds wohl nichts werden weil das immer die ganze Zeile 
ausgibt.
Mit sed gehts.
Mit python/perl/... natürlich auch, wahrscheinlich einfacher.
http://docs.python.org/library/re.html#re.findall

von Chris (Gast)


Lesenswert?

sebastians schrieb:
> nein, mit grep wirds wohl nichts werden weil das immer die ganze Zeile
> ausgibt.

grep mit der Option --only-matching gibt nur den Teil aus, der matcht. 
Besonders hilfreich ist das aber leider nicht, weil der immer den 
vollständigen Match ausgibt statt nur einen der geklammerten Teile der 
regexp.

sed ist hier schon OK, würde ich sagen. Zum Beispiel so:
sed 's/^.*prefix\(gewünschter teil\)rest.*$/\1/;t;d'

Das ";t;d" am Ende ist wichtig. Sonst gibt sed auch die Zeilen aus, bei 
denen die regexp überhaupt nicht gematcht hat.

von Chris (Gast)


Lesenswert?

Nur der Vollständigkeit halber: Die Sprache von sed ist 
turing-vollständig. Insofern ist prinzipiell jeder Algorithmus in sed 
mehr oder weniger umständlich programmierbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.