Scraping von Seiten funktioniert nicht?
Ich habe vor längerer Zeit mal begonnen einen Code zu schreiben mit dem ich die Daten von Radiosender extrahiere die keine API haben und bei allen Radiosendern bei der Stelle wo immer steht welcher Song das ist ist der HTML Code an der Stelle immer leer oder mit… Ausgefüllt weiß jemand woran das liegt
javascript:(function()%7Bvar%20song=document.querySelector('p%5Bdata-currently-playing-channelkey=%22live%22%5D%20strong').innerText+%22%20%22+document.querySelector('p%5Bdata-currently-playing-channelkey=%22live%22%5D%20span%5Bdata-artist%5D').innerText;alert(song);%7D)();%0A die Prozentzeichen nicht weg weil Safari ist automatisch so formatiert
4 Antworten
Keine Ahnung was Du da treibst.
Du hast nicht beschrieben auf welche Art Du den Inhalt der Zielwebseite (Radiosender) aquirierst? Innerhalb einer eigenen Webseite käme ohne spezielle Frameworks nur ein XMLHttpRequest in Frage. Allerdings "wehren" sich die meisten Webseiten gegen derartige "Übergriffe".
Webscraping erledigt man nicht per JavaScript innerhalb eines Browsers, sondern im Backend in PHP oder anderen Geeigneten Sprachen.
- https://brightdata.de/blog/wie/web-scraping-php-2
- https://www.zenrows.com/blog/powershell-scraping
- https://gaurishnaik.hashnode.dev/building-a-web-scraper-in-next-js
- usw...
einen universellen Scraper gibt es nicht!
WebScraper sind auf die jeweilige Zielseite individuell zugeschnitten. Also "bei allen Radiosendern' geht schon mal garnicht.
Javascriptbasierte , dynamische Webseiten zu scrapen ist eine besondere Herausforderung da einfache Webrequests lediglich den Code der Seite abrufen und diesen nicht ausführen.
die Prozentzeichen nicht weg weil Safari ist automatisch so formatiert
das ist ja totaler Schwachsinn... Ich weiß nicht wo und wie Du das JavaScript-Snippet aufgefischt hast. Aber es ist warum auch immer URL-encoded und so garantiert nicht ausführbar.
Decodieren ist ganz einfach🥱: ich habe den Abschnitt mal durch meine "Allzweckwaffe" (Powershell) gejagt.
$UrlEncoded=@'
(function()%7Bvar%20song=document.querySelector('p%5Bdata-currently-playing-channelkey=%22live%22%5D%20strong').innerText+%22%20%22+document.querySelector('p%5Bdata-currently-playing-channelkey=%22live%22%5D%20span%5Bdata-artist%5D').innerText;alert(song);%7D)();%0A
'@
[System.Net.WebUtility]::UrlDecode($UrlEncoded)
Ergebnis:
function(){var song=document.querySelector('p[data-currently-playing-channelkey="live"] strong').innerText " " document.querySelector('p[data-currently-playing-channelkey="live"] span[data-artist]').innerText;alert(song);})();
..was Du mit einem solchen Snippet anfangen willst erschließt sich mir nicht...
Vielleicht wird der HTML Code mittels JavaScript nach dem Laden der Seite ergänzt. In dem Fall wird der Songtitel möglicherweise per JSON übermittelt.
Hallo.
Wenn du den Code geschrieben hast, solltest du doch feststellen können, woran es liegt, oder?
Denkbar wäre, dass die Seite wo du es ausprobierst ein neues Layout hat, oder sie von Text auf Grafiken gewechselt haben.
Aber ohne deinen Code noch die Seite zu kennen, kann dir hier keiner helfen.
LG
Ich hab’s bei der Seite von Antenne Bayern ausprobiert und bei der von Energy aber da bestand die Seite hauptsächlich aus Funktionen und nicht HTML Tags deswegen konnte man das nicht ermitteln
ohne code kann niemand sagen wo der fehler liegen könnte, aber das einfache webscrapen ist jetzt nicht sonderlich schwer