staging.inyokaproject.org

Titelbild einer Wordpress-Seite automatisiert herunterladen (wget/hxselect)

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 20.04 (Focal Fossa)
Antworten |

UsualRedFox

Anmeldungsdatum:
23. Juli 2017

Beiträge: 95

Hallo allerseits,

ich würde gerne das Artikelbild von Wordpress Posts per Kommandozeile herunterladen. Da ich das gerne automatisieren möchte, würde ich gerne einfach nur die URL eingeben und mir das Bild dann automatisiert per wget holen.

Wenn ich bspw. den ersten Absatz des Artikels möchte, nutze ich hxselect und hxnormalize:

1
hxnormalize -x $URL | hxselect "div+p"

Wie kann ich aber an das Bild (bzw. die passende URL) kommen, gibt es da eine elegante Lösung? (muss nicht zwingend mit hxselect sein)

(Ich habe mal einen Screenshot der Code-Struktur des entsprechenden Bildes gemacht und angehängt. Kann man das sehen??).

PS: Gibt es eine Möglichkeit (mit sed oder perl) den Inhalt zwischen zwei Tags auszugeben – und den Ort per "XPath" oder "CSS Selektoren" anzugeben (Sprich: //div[1]/figure/a/img)? So könnte man das ja eigentlich recht elegant lösen, aber ich weiß leider nicht wie ich das genau angehen soll.

Anhang

UsualRedFox

(Themenstarter)

Anmeldungsdatum:
23. Juli 2017

Beiträge: 95

Ok habe die Lösung gefunden:

1
wget -q -O - $URL | xmllint --html --xpath 'xpath/pfad/hier/eingeben' - 2>/dev/null

Den puren Link kann man dann mit grep extrahieren:

1
grep -o 'http://[^"]*'

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

UsualRedFox schrieb:

Den puren Link kann man dann mit grep extrahieren:

1
grep -o 'http://[^"]*'

Das sollte nicht nötig sein: Du kannst den Wert eines Attributes direkt mit XPath extrahieren, z.B. "//a/@href" oder ggf. "//a/@href/text()".

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

PS: für solche Automatisierungen ist curl gefühlt das bessere Werkzeug. wget nehme ich eher, wenn ich komplette Sites herunterladen muss.

PPS: Wenn das größer wird, mache ich persönlich so etwas am liebsten mit Mechanize und Nokogiri in Ruby, weil einem das schon viel abnimmt und Ruby einfach klasse ist. Ende Werbeblock. 😉

UsualRedFox

(Themenstarter)

Anmeldungsdatum:
23. Juli 2017

Beiträge: 95

rklm schrieb:

Das sollte nicht nötig sein: Du kannst den Wert eines Attributes direkt mit XPath extrahieren, z.B. "//a/@href" oder ggf. "//a/@href/text()".

//a/@href ergibt bei mir:

1
href="https://link.zur/bilddatei.jpg"

Danke für deinen Werbeblock! Ich bin ganz neu in dem Thema und mache es gerade mit dem was ich kann (sprich wget, hxselect, tr, sed...) ruby und curl habe ich mir nie wirklich angeschaut.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

UsualRedFox schrieb:

//a/@href ergibt bei mir:

1
href="https://link.zur/bilddatei.jpg"

Und was ergibt "//a/@href/text()"?

Danke für deinen Werbeblock! Ich bin ganz neu in dem Thema und mache es gerade mit dem was ich kann (sprich wget, hxselect, tr, sed...) ruby und curl habe ich mir nie wirklich angeschaut.

Na, dann viel Spaß! ☺

UsualRedFox

(Themenstarter)

Anmeldungsdatum:
23. Juli 2017

Beiträge: 95

rklm schrieb:

Und was ergibt "//a/@href/text()"?

Da bekomme ich eine leere Ausgabe. Kann das sein?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

UsualRedFox schrieb:

rklm schrieb:

Und was ergibt "//a/@href/text()"?

Da bekomme ich eine leere Ausgabe. Kann das sein?

Offensichtlich kann es das.

Mit xmlstarlet bekomme ich es hin:

1
2
$ xmlstarlet sel -t -v '//a/@href' x.xml; echo
http://foo.bar

Input muss XHTML sein, ggf. mit tidy -asxml formatieren.

Antworten |