Bilder einer Liste mit URL automatisch downloaden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

xXSkyWalkerXx1 hat geschrieben: Samstag 30. November 2019, 22:12 Ich glaube er sollte sich erstenmal über die Grundlagen von Python, sowie über das Modul "requests" und, von jackblack bereits erwähnt, das "csv" Modul informieren.
Der Britta Baumgart sollte auf jeden Fall auch den Dateinamen des Python-Skripts mit angeben. Ansonsten weiß Python nämlich nicht, was es mit der CSV-Datei tun soll.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

Guten Morgen....und einen schönen ersten Advent

für mich sind das halt echt, wie eingangs schon geschrieben, böhmische Dörfer......sorry :-(

Wahrscheinlich ist es so, dass ich mich hier grad zum ersten und einzigen mal in meinem Leben mit diesem Thema befassen muss.
Ich brauche diese Technik nur für diesen konkreten, recht eiligen Fall (der Bildersicherung). Von daher kann ich mir schwer Grundlagen etc aneignen.
Leider auch niemanden hier vor Ort habe, der sich damit auskennt, wehalb ich hier gelandet bin.

Könnt Ihr es vielleicht noch einmal versuchen, mir in einfachen Worten zu erklären?

Ich habe mir python3 auf dem Mac installiert
ich habe auf dem Desktop einen Ordner (Bildersicherung) erstellt.
In diesem Ordner (Bildersicherung) befinden sich die Export-Datei (export1.csv), die .py-Datei (Tool1.py) mit dem von __deets__ korrigierten Code und ein Unterordner (Bilder)

LG Britta
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es sind DREI Dinge hinzuschreiben.

- python. Weil es ein Python Programm ist.
- skriptname.py , weil Python wissen muss, welchen Code es ausführen muss. ACHTUNG: skriptname.py muss DEIN Name sein.
- Dateiname.csv oder wie auch immer es bei dir heißt. Denn das Programm muss ja nun auch wissen, WELCHE Daten es verarbeiten soll.

Also unter der Annahme das deine Angaben korrekt sind, und du im Terminal in den Ordner gewechselt hast, in dem das alles bereit liegt:

Code: Alles auswählen

python Tool.py export1.csv
Und dann wird das Ding mit einer neuen Fehlermeldung abschmieren, weil es versucht die Bilder an der falschen Stelle abzulegen. Das hat auch der ursprüngliche Experte verhauen. Dazu muss dann vorher noch

"/Bilder/"

abgeändert werden zu

"Bilder/"

ohne führenden /.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

__blackjack__ hat geschrieben: Samstag 30. November 2019, 23:02 @gonzo900: Und das ist immer noch falsch. Das besteht aus *drei* Teilen. Dem Programm das ausgeführt werden soll (Python), der Python-Datei die von Python ausgeführt werden soll, und dem Dateinamen der CSV-Datei.
Hallo @__blackjack__

das habe ich doch probiert :?

Eingabe im Terminal: python3 Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv

"python3" ist das auszuführende Programm
"Tool1.py" die von python3 auszuführende Python-Datei
"/Users/brittabaumgart/Desktop/Bildersicherung/export1.csv" ist der Pfad zur Export-Datei
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Unfug. Du hast das hier oben geschrieben:

Code: Alles auswählen

Die Fehlermeldung ist:

Last login: Sat Nov 30 18:33:45 on ttys000
Brittas-iMac:~ brittabaumgart$ python3 /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv
File "/Users/brittabaumgart/Desktop/Bildersicherung/export1.csv", line 1
Wo bitte steht da Tool.py? Und die Fehlermeldung ist auch passend dazu, Python alleine kann dein CSV nunmal nicht lesen.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

__deets__ hat geschrieben: Sonntag 1. Dezember 2019, 11:52 Unfug. Du hast das hier oben geschrieben:

Code: Alles auswählen

Die Fehlermeldung ist:

Last login: Sat Nov 30 18:33:45 on ttys000
Brittas-iMac:~ brittabaumgart$ python3 /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv
File "/Users/brittabaumgart/Desktop/Bildersicherung/export1.csv", line 1
Wo bitte steht da Tool.py? Und die Fehlermeldung ist auch passend dazu, Python alleine kann dein CSV nunmal nicht lesen.
Das war eine der vielen ausprobierten Varianten, weil ich gestern bereits ziemlich durcheinander mit allem war.... :?
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

gonzo900 hat geschrieben: Sonntag 1. Dezember 2019, 11:49 Eingabe im Terminal: python3 Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv

"python3" ist das auszuführende Programm
"Tool1.py" die von python3 auszuführende Python-Datei
"/Users/brittabaumgart/Desktop/Bildersicherung/export1.csv" ist der Pfad zur Export-Datei
Das sieht erstmal ganz gut aus, sofern die Pfadangaben stimmen. Klappt es denn jetzt?
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

snafu hat geschrieben: Sonntag 1. Dezember 2019, 12:37
gonzo900 hat geschrieben: Sonntag 1. Dezember 2019, 11:49 Eingabe im Terminal: python3 Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv

"python3" ist das auszuführende Programm
"Tool1.py" die von python3 auszuführende Python-Datei
"/Users/brittabaumgart/Desktop/Bildersicherung/export1.csv" ist der Pfad zur Export-Datei
Das sieht erstmal ganz gut aus, sofern die Pfadangaben stimmen. Klappt es denn jetzt?
Hallo @snafu

leider nein :

Last login: Sun Dec 1 12:41:22 on ttys000
Brittas-iMac:~ brittabaumgart$ python3 Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv
/Library/Frameworks/Python.framework/Versions/3.8/bin/python3: can't open file 'Tool1.py': [Errno 2] No such file or directory
Brittas-iMac:~ brittabaumgart$

:((
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du den vollen Pfad zur CSV Datei angibst, und Tool.py daneben liegt - wieso glaubst du es klappt OHNE da den vollen Pfad anzugeben? Auch der muss vollständig sein. Oder du wechselst mit ‚cd ~/Desktop/Bildersicherung‘ erstmal ins passende Verzeichnis.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

__deets__ hat geschrieben: Sonntag 1. Dezember 2019, 12:46 Wenn du den vollen Pfad zur CSV Datei angibst, und Tool.py daneben liegt - wieso glaubst du es klappt OHNE da den vollen Pfad anzugeben? Auch der muss vollständig sein. Oder du wechselst mit ‚cd ~/Desktop/Bildersicherung‘ erstmal ins passende Verzeichnis.
Das weiß ich nicht, wie gesagt, absolut null Ahnung davon :-(

Ich habe es jetzt so gemacht:

python3 /Users/brittabaumgart/Desktop/Bildersicherung/Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv


Fehlermeldung:


Last login: Sun Dec 1 12:41:39 on ttys000
Brittas-iMac:~ brittabaumgart$ python3 /Users/brittabaumgart/Desktop/Bildersicherung/Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv
Traceback (most recent call last):
File "/Users/brittabaumgart/Desktop/Bildersicherung/Tool1.py", line 16, in <module>
value, params = cgi.parse_header(blah)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/cgi.py", line 226, in parse_header
parts = _parseparam(';' + line)
TypeError: can only concatenate str (not "NoneType") to str
Brittas-iMac:~ brittabaumgart$
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Fortschritt! Das Skript geht halt nicht. Aber das ist der nächste Schritt. Ich schaue mir das mal an.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

__deets__ hat geschrieben: Sonntag 1. Dezember 2019, 12:51 Fortschritt! Das Skript geht halt nicht. Aber das ist der nächste Schritt. Ich schaue mir das mal an.
Dankeschön :-)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

So. Das hier tut, aber ich musste diverse Aenderungen machen, und es gibt einen schwierigen Zwischenschritt. Hier erstmal das Skript:

Code: Alles auswählen

import csv
import urllib.request
from urllib.request import urlopen
import cgi
import sys
import os

with open(sys.argv[1]) as csvfile:
    bilder_path = sys.argv[2]
    reader = csv.reader(csvfile, delimiter=';', quotechar='|')
    for row in reader:

        fileurl = row[0] #Link zum Herunterladen (Muss http, nicht https)
        filepos = row[1] #erstes zweites oder drittes bild

        remotefile = urlopen(fileurl)
        info = remotefile.info()
        filename = fileurl.split("/")[-1]
        filename = f"{filepos}-{filename}"
        urllib.request.urlretrieve(fileurl, os.path.join(bilder_path, filename))
        print("finished", filename)

ACHTUNG: das schlaegt fehl, weil die Zertifikate von Python fehlen

Dazu musst du im Finder den Ordner "Python 3.8" finden, und darin das "Install Certificates.command" starten. Das oeffnet ein Fenster, und nach ein paar Sekunden tut das nix mehr und kann geschlossen werden.

Aufzurufen jetzt bitte so:

Code: Alles auswählen

python3 /Users/brittabaumgart/Desktop/Bildersicherung/Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv /Users/brittabaumgart/Desktop/Bildersicherung/
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich hab's vergessen zu erwaehnen, darum nochmal: ich erwarte jetzt explizit das Verzeichnis, in dem die Bilder landen sollten. Auch das war vorher kaputt. Es muessen also "python skript.py csv-datei verzeichnis" angegeben werden!!!!!
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

__deets__ hat geschrieben: Sonntag 1. Dezember 2019, 13:17 Ich hab's vergessen zu erwaehnen, darum nochmal: ich erwarte jetzt explizit das Verzeichnis, in dem die Bilder landen sollten. Auch das war vorher kaputt. Es muessen also "python skript.py csv-datei verzeichnis" angegeben werden!!!!!
Das Zielverzeichnis soll sein:

/Users/brittabaumgart/Desktop/Bildersicherung/Bilder
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann gib das halt an, ich habe oben hingeschrieben wie es sein muss.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

Hi @__deets__

die Zertifikate scheinen abgeschlossen zu sein:

Last login: Sun Dec 1 12:48:39 on ttys000
Brittas-iMac:~ brittabaumgart$ /Applications/Python\ 3.8/Install\ Certificates.command ; exit;
-- pip install --upgrade certifi
Collecting certifi
Downloading https://files.pythonhosted.org/packages ... ne-any.whl (156kB)
|████████████████████████████████| 163kB 1.2MB/s
Installing collected packages: certifi
Successfully installed certifi-2019.11.28
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
-- removing any existing file or link
-- creating symlink to certifi certificate bundle
-- setting permissions
-- update complete
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...none found.

[Prozess beendet]
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

python3 /Users/brittabaumgart/Desktop/Bildersicherung/Tool1.py /Users/brittabaumgart/Desktop/Bildersicherung/export1.csv /Users/brittabaumgart/Desktop/Bildersicherung/Bilder
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann. Es sollte Dateinamen ausspucken.
gonzo900
User
Beiträge: 24
Registriert: Samstag 30. November 2019, 13:29

Es funktioniert :-)

Super!!!!

Ganz ganz lieben Dank Euch allen!!!
Antworten