Links als Zeichenketten speichern

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.
Antworten
senmeis
User
Beiträge: 7
Registriert: Montag 7. Juli 2025, 14:20

Hi,

auf dieser Webseite https://pixabay.com/music/search/beethoven/ sind paar Links zu sehen: https://pixabay.com/music/classical-pia ... en-216331/ usw.

Ist es möglich diese URLs irgendwie in Zeichenketten abzuspeichern?
Benutzeravatar
snafu
User
Beiträge: 6995
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das sollte funktionieren, wenn man dafür Selenium einsetzt. Damit wird die Webseite in einer Browser-Umgebung geladen und somit auch das JavaScript ausgeführt, damit sich die Inhalte vollständig aufbauen. Anschließend kann man über die API von Selenium alle Links abfragen und diese filtern, damit man nur Links zu Songs erhält. Diese enden immer auf eine ID, was man per Regex oder Pythons eingebauter isdigit()-Methode erkennen kann.
senmeis
User
Beiträge: 7
Registriert: Montag 7. Juli 2025, 14:20

Aus Besorgnis vor Sicherheitslücken ungern JavaScript aktivieren. Ist es machbar, den ganzen HTML-Quellcode zu speichern und dann nach Links zu filtern? Leider ist „Page Source“ in Firefox deaktiviert.
Benutzeravatar
snafu
User
Beiträge: 6995
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ohne JavaScript könnte es dann aber sehr kompliziert werden, da die Inhalte dynamisch nachgeladen werden.

Sofern du es doch mal mit Selenium ausprobieren möchtest, dies funktioniert bei mir:

Code: Alles auswählen

#!/usr/bin/env python3
import re
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# Wartezeit für den Seitenaufbau
DELAY = 3

USER_AGENT = """\
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/150.0.0.0 Safari/537.36"""

URL = "https://pixabay.com/music/search/beethoven/"

search_song_id = re.compile(r"/music/.*-\d+").search

def get_chrome_driver(agent=USER_AGENT):
    chrome_options = Options()
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("user-agent={agent}")
    return webdriver.Chrome(options=chrome_options)

def get_song_links(driver, url, delay=DELAY):
    driver.get(url)
    time.sleep(delay)
    music_links = (
        element.get_attribute("href") for element in
        driver.find_elements(By.CSS_SELECTOR, "a[href*='/music/']")
    )
    return list(filter(search_song_id, music_links))

def main():
    try:
        print("Lade Chrome Driver...")
        driver = get_chrome_driver()
        print(f"Hole Song-Links von {URL!r}...")
        links = get_song_links(driver, URL)
        print(links)
    finally:
        driver.quit()

if __name__ == "__main__":
    main()
Benutzeravatar
DeaD_EyE
User
Beiträge: 1370
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

senmeis hat geschrieben: Sonntag 2. August 2026, 12:11 Aus Besorgnis vor Sicherheitslücken ungern JavaScript aktivieren. Ist es machbar, den ganzen HTML-Quellcode zu speichern und dann nach Links zu filtern? Leider ist „Page Source“ in Firefox deaktiviert.
Auch wenn diese Seite nicht vorgesehen ist von Bots geparst zu werden, kann man sie als vertrauenswürdig einstufen. Wenn man Selenium in Python verwendet, wird ein zweiter Prozess gestartet, dass der ferngesteuerte Browser ist. Der kann im Prinzip alles machen, was ein normaler Browser auch kann, nur das dieser halt von Python über einen Socket ferngesteuert wird.

Also rein theoretisch könnte ein Hacker seine Seite so präparieren, dass wenn du Selenium nutzt, während der Laufzeit z.B. Bitcoin berechnet wird. Aber selbst das wäre nicht so schlimm, da die Session zeitlich begrenzt ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
noisefloor
User
Beiträge: 4334
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ist es machbar, den ganzen HTML-Quellcode zu speichern und dann nach Links zu filtern?
Ja - mit dem von snafu beschriebenen Weg. Die Seite ist halt _kein_ statisches HTML, sondern ein großer Teil, u.a. die Trefferlisten, werden zur Laufzeit dynamisch via JavaScript nachgeladen und im Browser angezeigt. Wenn du im Browser aber den Quelltext anzeigen lässt (z.B. via STRG+U im Firefox), siehst du nur den Quelltext, der ursprünglich vom Server kam und eben _nicht_ das, was später dazu generiert wurde. Das ist heute aus diversen Gründen heute eine extrem gängige Technik, den viele Seiten nutzen.

Und an den Inhalt kommst du am einfachsten halt wie beschrieben dran.

Gruß, noisefloor
Benutzeravatar
snafu
User
Beiträge: 6995
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Als JavaScript-freie Alternative bietet sich die Nutzung der Pixabay API an. Dazu muss man sich als Anwender registrieren lassen und erhält dann - wie üblich - einen API-Key, den man für jede Anfrage mitsenden muss. Die API liefert erwartungsgemäß JSON statt HTML zurück, aus welchem man die benötigten Infos abrufen kann.
Benutzeravatar
snafu
User
Beiträge: 6995
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

snafu hat geschrieben: Montag 3. August 2026, 08:05 Als JavaScript-freie Alternative bietet sich die Nutzung der Pixabay API an. Dazu muss man sich als Anwender registrieren lassen und erhält dann - wie üblich - einen API-Key, den man für jede Anfrage mitsenden muss. Die API liefert erwartungsgemäß JSON statt HTML zurück, aus welchem man die benötigten Infos abrufen kann.
Geht bisher aber nur für Bilder und Videos. Für Musik gibt es leider keine API. Daher muss man sich tatsächlich mit der HTML-Ausgabe und dem damit einhergehenden Aufwand fürs Ermitteln der URLs begnügen.
Antworten