www.mikrocontroller.net

Forum: PC-Programmierung URLs aus HTML extrahieren


Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lord Ziu (lordziu)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.