Bei vielen Bildverarbeitungsproblemen enthält der Beitrag Bilder, die in einer Datei gespeichert werden müssen, damit das Problem behoben werden kann. Dies ist eine besonders mühsame manuelle Aufgabe. Wir Programmierer sollten uns keiner solchen Plackerei unterziehen müssen. Ihre Aufgabe ist es, alle in einer Code Golf.SE-Frage enthaltenen Bilder automatisch herunterzuladen.
Regeln
- Ihr Programm stellt möglicherweise eine Verbindung zu einem beliebigen Teil von
stackexchange.com
, aber möglicherweise nicht zu anderen Domänen her, mit Ausnahme der Speicherorte der Bilder (z. B. ohne URL-Kürzung). - Eine Ganzzahl N wird als Eingabe in der Befehlszeile oder in stdin angegeben.
- Die URL ist garantiert ein gültiger Link zu einer Code Golf-Frage.
http://codegolf.stackexchange.com/questions/N
- Jedes Bild, das im Hauptteil der Frage angezeigt wird N muss in einer Datei auf dem lokalen Computer gespeichert werden. Einer der folgenden Standorte ist akzeptabel:
- Das aktuelle Verzeichnis
- Ein vom Benutzer eingegebenes Verzeichnis
- Ihr Programm darf keine anderen Dateien als die Bilder im Fragenkörper speichern (z. B. Benutzeravatare oder in Antworten enthaltene Bilder).
- Bilder müssen mit derselben Dateierweiterung wie das Original gespeichert werden.
Dies ist ein Code-Golf - schreiben Sie das kürzeste Programm, das Sie können.
Gültigkeitskriterium für Antworten
Es gibt verschiedene mögliche Randfälle mit mehreren Bildern mit demselben Namen, Text mit demselben Namen wie HTML-Elemente usw. Eine Antwort wird nur ungültig, wenn bei einer Überarbeitung einer Frage, die vor dem 10. Januar 2015 veröffentlicht wurde, gezeigt werden kann, dass sie fehlschlägt .
Antworten:
Mathematica,
211210 BytesUngolfed:
Es ist ziemlich einfach. Ich habe einen Filter für die StackExchange-API eingerichtet, der nur den Hauptteil einer Frage zurückgibt. Der Code ruft die Frageninformationen mit diesem Filter ab und analysiert sie als JSON. Ich wähle das richtige Element (den Body) aus und
ImportString
analysiere den HTML-Code und filtere alle Bild-URLs heraus.FileNameTake@#~Export~Import@#
Lädt dann jedes der Bilder herunter und speichert es im aktuellen Arbeitsverzeichnis mit demselben Dateinamen wie dem in der URL.Mit können Sie das aktuelle Arbeitsverzeichnis herausfinden
Directory[]
.Im Prinzip gibt es eine viel kürzere Version, da
ImportString
alle Dateien sofort heruntergeladen werden können, anstatt mir nur die URLs zu geben. Aber dann verliere ich Informationen über den ursprünglichen Dateityp (da dieseImage
beim Herunterladen in Objekte konvertiert werden), sodass ich sie nur als denselben Typ speichern kann (z. B. PNG).quelle
Javascript -
149161 Bytesmit Leerzeichen
Das Skript muss von der StackExchange-Site ausgeführt werden, um zu funktionieren.
Wird standardmäßig auf die aktuelle Seite gesetzt, wenn in der Eingabeaufforderung keine Fragennummer angegeben istquelle
$('[src*="imgur"]',d)
ich, tun . Ich mag, dass dies in der Konsole ausgeführt werden kann - sofortige Befriedigung.questions
kann auf gekürzt werden,q
sollte aber dencodegolf.stackexchange.com
Teil enthalten, anstatt sich auf diese Seite zu verlassen. @Josiah Es ist möglich, Bilder von anderen Domains in Posts aufzunehmen.#question .post-text img
kann auf.post-text:first img
oder gekürzt werden.post-text:eq(0) img
.Python 2 - 241 Bytes
Ziemlich unkompliziert, kann wohl weiter golfen werden. Ich suche auf der Website nach allen Vorkommen
img src=
zwischen dem ersten Vorkommenpost-text
und dem/div
unmittelbar darauf folgenden. Jede Bild-URL wird dann gelesen und im Arbeitsverzeichnis gespeichert.quelle
[-9:]
) der Bild-URL genommen, die ihren 5-stelligen Namen und ein.png
oder.jpg
usw. behalten soll. Wenn die Erweiterung länger als 3 Zeichen ist, werden Bytes des Dateinamens abgeschnitten .for
Schleife zu einer Zeile machen.for p re.findall(...):f=open(...);f.write(...)
Mathematica, 195
Dadurch werden Bilder auf die gleiche Weise exportiert, wie dies Martin in seiner Mathematica-Lösung getan hat. Weitere Informationen hierzu finden Sie in seiner Antwort. Dieser Ansatz unterscheidet sich stark von seinem, anstatt das Ergebnis über die API zu analysieren, analysiere ich die HTML-Seite direkt. Oder besser gesagt, ich analysiere das symbolische XML, das Mathematica aus HTML generieren kann.
quelle
Python 2 -
398342334 BytesDas Programm lädt die SE-Seite herunter, extrahiert den Beitragsteil (das Post-Text-Div-Element), findet URLs, die in einer Bilderweiterung enden, und lädt sie herunter. Die Bilder werden gespeichert als
img<n>.<ext>
im aktuellen Verzeichnis .Dieses Programm lädt auch Bilder herunter, die als Link bereitgestellt werden, nicht nur eingebettete Bilder. Wenn Sie jedem Bild einen eindeutigen Dateinamen zuweisen, werden auch Namenskonflikte vermieden.
quelle
questions
mitq
(in der URL).Bash - 86 Bytes
Nichts Wget wird nicht behoben.
-np
verhindert, dass wget in die oberen Verzeichnisse (User Imgs) gelangt und-A
nur Dateien mit der Erweiterung aufruft, die der angezeigten Liste entspricht.-r
ist ein rekursiver Download.-l
verhindert, dass Wget zu tief geht.$1
ist die Frage zu greifen.quelle
questions
mitq
in der URL.Node.js,
251247 BytesVerwendet
request
, um HTTPGET
scheerio
zu erstellen und den HTML-Code zu analysieren. Namenskollisionen werden behoben, indem der Index des aktuellen Bildes dem Basisnamen der Datei-URL vorangestellt wird. Bilder werden im selben Verzeichnis wie die aktuelle Datei gespeichert.quelle
Lua, 200 Bytes
Akzeptiert die Nummer als Befehlszeilenargument.
Angenommen, ein
src=
Attribut bezieht sich auf einimg
Tag, da dies die einzigen Tags mit sindsrc
Attributen sind, die der Stapelaustausch zulässt (richtig?).Beachten Sie auch die
.. ...
. Darauf bin ich besonders stolz.quelle