Was stimmt mit meinem Skript nicht? youtube_transcript_apiPython

Python-Programme
Anonymous
 Was stimmt mit meinem Skript nicht? youtube_transcript_api

Post by Anonymous »

Was stimmt mit meinem Skript nicht?
Ich habe Folgendes auf meinem Windows 10-System in Powershell installiert...
  • eine virtuelle Python-Umgebung (venv)
  • dann Python aktualisiert
  • und dann youtube-transcript-api installiert
  • eine urls.txt-Datei mit den YT-URLs erstellt
  • das Skript „download_transcripts.py“ erstellt
In venv ausführen.
Es scheint, dass nichts geladen wird.

Code: Select all

# download_transcripts.py

from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.transcript import TranscriptList
import re
import os

# --- Konfiguration ---
URLS_FILE = "urls.txt"
OUTPUT_DIR = "transcripts"
# ---------------------

def extract_video_id(url):
"""Extrahiert Video-ID aus YouTube-URL"""
# Muster für verschiedene URL-Formate (watch?v=, youtu.be/, embed/, etc.)
pattern = r"(?:v=|\/)([0-9A-Za-z_-]{11}).*"
match = re.search(pattern, url)
return match.group(1) if match else None

def get_transcript_text(transcript_segments):
"""Segmente zu einem Text"""
return ' '.join([segment['text'] for segment in transcript_segments])

def download_transcripts():
"""Liest URLs, extrahiert IDs, Transkripte download"""
if not os.path.exists(URLS_FILE):
print(f"Fehler: Die Datei '{URLS_FILE}' wurde nicht gefunden.")
return

os.makedirs(OUTPUT_DIR, exist_ok=True)

video_ids = []
# URLs aus der Datei lesen und IDs extrahieren
with open(URLS_FILE, 'r') as f:
for line in f:
url = line.strip()
if url:
video_id = extract_video_id(url)
if video_id:
video_ids.append(video_id)
else:
print(f"Warnung: Konnte die Video-ID aus der URL '{url}' nicht extrahieren.")

if not video_ids:
print("Keine gültigen Video-IDs zum Herunterladen gefunden.")
return

print(f"Starte Download für {len(video_ids)} Videos...")

try:
transcript_list = YouTubeTranscriptApi.get_transcripts(
video_ids,
continue_after_error=True,
language=['de']
)

for video_id, transcript_or_error in zip(video_ids, transcript_list):

if isinstance(transcript_or_error, Exception):
print(f"Fehler beim Abrufen des Transkripts für ID {video_id}: {transcript_or_error}")
continue

try:
transcript = transcript_or_error[0]

full_text = get_transcript_text(transcript)

output_filename = os.path.join(OUTPUT_DIR, f"{video_id}.txt")
with open(output_filename, 'w', encoding='utf-8') as outfile:
outfile.write(full_text)

print(f"Erfolgreich gespeichert: {output_filename}")

except Exception as e:
print(f"Warnung: Konnte kein Transkript für ID {video_id} speichern/finden. Detail: {e}")

except Exception as e:
print(f"\n Kritischer Fehler während des API-Aufrufs: {e}")

if __name__ == "__main__":
download_transcripts()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post