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.
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 18:15
Hallo Forum.
folgende Frage in die Runde .. ich möchte Youtube-Videos auf meine lokale Festplatte runterladen.. kappt auch prima als Script! Wenn ich daraus eine EXE via pyinstaller mache, dann bekomme ich immer den Hinweis "Video nicht gefunden!", obwohl das Video exisiert! Hat jemand vielleicht eine Idee wo hier der Fehler liegt? Gruß, Andi
Code: Alles auswählen
import sys
from pytube import YouTube
if len(sys.argv) < 3:
print('\nFormat: youtube.exe <Link zum Youtube-Video> <Zielordner>\n')
sys.exit(0)
try:
url = sys.argv[1]
dl = sys.argv[2]
youtube = YouTube(url)
print(f'\nTitel: {youtube.title}')
youtube.streams.get_highest_resolution().download(dl)
print('\n')
except:
print('Video wurde nicht gefunden!')
__deets__
User
Beiträge: 14538 Registriert: Mittwoch 14. Oktober 2015, 14:29
Sonntag 23. Januar 2022, 18:20
Du solltest als erstes mal das try/except wegschmeissen. So wie das da steht, faengt das *jeden* Fehler ab, den du (oder der Paketierer) gemacht hat, und man kann nicht mehr rausfinden, was eigentlich los ist. Als Faustregel fuer Anfaenger: Fehler nie allgemein abfangen, sondern immer nur so spezifisch wie moeglich!
pillmuncher
User
Beiträge: 1484 Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel
Sonntag 23. Januar 2022, 18:22
Herzlichen Glückwunsch! Du hast gerade herausgefunden, warum es keine gute Idee ist, nackte except-Statements zu verwenden. Statt dessen schreib hin, welche Ausnahmen du konkret erwartest. Oder, falls du keine erwartest, lass den try-except-Block weg, damit die Ausnahme ausgegeben wird.
In specifications, Murphy's Law supersedes Ohm's.
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 19:10
Hallo,
Okay -Verstanden! Und wie mache ich am besten die Existenz eines Videos abzufragen?
Grüße, Andi
kbr
User
Beiträge: 1487 Registriert: Mittwoch 15. Oktober 2008, 09:27
Sonntag 23. Januar 2022, 21:07
Nein. Nimm erst einmal, wie schon mehrfach erwähnt, try/except weg und lass dir ausgeben, warum es knallt.
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 21:36
Sorry,
hier die Fehlermeldung: pytube.exceptions.VideoUnavailable: jNqhUIYZM22 is unavailable
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 21:59
Und wie kann man die Exception-Class abfragen?? Sorry, wenn ich es wüsste, dann würde ich nicht fragen!
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 22:33
Hallo,
laut Doku unter "
https://pytube.io/en/latest/user/exceptions.html " müsste es so funktionieren. Leider bei mir nicht!
Bei mir kommt immer noch der Fehler:
pytube.exceptions.VideoUnavailable: c4hbRjT1j22 is unavailable
Code: Alles auswählen
try:
yt = YouTube(url)
except VideoUnavailable:
print(f'Video {url} wurde nicht gefunden!')
else:
print(f'Titel: {yt.title}')
yt.streams.get_highest_resolution().download(dl)
print('\nFertig.')
rogerb
User
Beiträge: 878 Registriert: Dienstag 26. November 2019, 23:24
Sonntag 23. Januar 2022, 22:55
Du hast die Exception um den falschen Code gelegt. Der Fehler tritt auf, wenn versucht wird, die streams nachzuladen.
Aber abgesehen davon:
Wenn ich "
https://www.youtube.com/watch?v=c4hbRjT1j22 " in den Browser kopiere, kommt die Meldung: Das Video ist nicht mehr verfügbar.
Es scheint wirklich nicht verfügbar zu sein. Oder wie lautet die url?
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 23:08
Hallo,
Danke für die Info! Die URL vom Video ist bewusst falsch! Stattdessen soll die Fehlermeldung: "Video {url} wurde nicht gefunden!" erscheinen...
rogerb
User
Beiträge: 878 Registriert: Dienstag 26. November 2019, 23:24
Sonntag 23. Januar 2022, 23:11
dann müsste der Auschnitt von oben wohl so aussehen:
Code: Alles auswählen
yt = YouTube(url)
try:
print(f'Titel: {yt.title}')
yt.streams.get_highest_resolution().download(dl)
except VideoUnavailable:
print(f'Video {url} wurde nicht gefunden!')
else:
print('\nFertig.')
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Sonntag 23. Januar 2022, 23:26
Hallo,
leider erscheint der Fehler: except VideoUnavailable:
NameError: name 'VideoUnavailable' is not defined
Code: Alles auswählen
url = sys.argv[1]
dl = sys.argv[2]
yt = YouTube(url)
try:
print(f'Titel: {yt.title}')
yt.streams.get_highest_resolution().download(dl)
except VideoUnavailable:
print(f'Video {url} wurde nicht gefunden!')
else:
print('\nFertig.')
rogerb
User
Beiträge: 878 Registriert: Dienstag 26. November 2019, 23:24
pillmuncher
User
Beiträge: 1484 Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel
Sonntag 23. Januar 2022, 23:45
Naja, wenn du einen Namen aus einem Modul verwenden willst, musst du ihn halt auch importieren. Vermutlch so:
In specifications, Murphy's Law supersedes Ohm's.
AndiS
User
Beiträge: 24 Registriert: Dienstag 21. September 2021, 20:44
Montag 24. Januar 2022, 17:46
Hallo,
danke für die tatkräftige Unterstützung. Leider kommt immer noch folgender Fehlercode:
raise exceptions.VideoUnavailable(video_id=self.video_id)
pytube.exceptions.VideoUnavailable: LovsHHk3t22 is unavailable
Hier mal der ganze Quellcode:
Code: Alles auswählen
import sys
from pytube import YouTube
from pytube.exceptions import VideoUnavailable
if len(sys.argv) < 3:
print('\nFormat: youtube.exe <Link zum Youtube-Video> <Zielordner>\n')
sys.exit(0)
url = sys.argv[1]
dl = sys.argv[2]
yt = YouTube(url)
print(f'Titel: {yt.title}')
try:
yt.streams.get_highest_resolution().download(dl)
except VideoUnavailable:
print(f'Video {url} wurde nicht gefunden!')
else:
print('\nFertig.')
Vielen Dank, Andi.
__deets__
User
Beiträge: 14538 Registriert: Mittwoch 14. Oktober 2015, 14:29
Montag 24. Januar 2022, 17:48
Bitte die GANZE Fehlermeldung posten. Denn sonst muss man raten.
Wenn ich das tue, dann denke ich mal, dass auch das
yt = YouTube(url)
in deinen try-Block gehoert.