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?
Links als Zeichenketten speichern
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.
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:
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()
- DeaD_EyE
- User
- Beiträge: 1370
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
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.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.
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
- noisefloor
- User
- Beiträge: 4334
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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.Ist es machbar, den ganzen HTML-Quellcode zu speichern und dann nach Links zu filtern?
Und an den Inhalt kommst du am einfachsten halt wie beschrieben dran.
Gruß, noisefloor
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.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.
