Livetiming auslesen
Moderator: Moderatoren
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Livetiming auslesen
Hallo,
hier mal etwas für die HTML-Freaks:
Ich versuche, diese Seite auszulesen, damit ich die Daten (rein privat) in einem Programm benutzen kann.
https://livetiming.azurewebsites.net/event=20?config=w5
Die Seite läuft auch nur, wenn Rennen der NLS (Nürburgring-Langstrecken-Serie) laufen. Z.B. "JETZT" (01.05.2021, 13:25 h).
Wenn ich mir den Quelltext ansehe, dann ist die Tabelle bzw. sind die Daten da gar nicht enthalten. Hat bestimmt etwas mit den Scripts zu tun, aber das kriege ich nicht hin.
Habe auch schon mal mit Selenium herumexperimentiert, aber auch da bin ich einfach noch viel zu laienhaft.
Wer hat eine Idee, eine Lösung?
Merci und Gruß
Christof
hier mal etwas für die HTML-Freaks:
Ich versuche, diese Seite auszulesen, damit ich die Daten (rein privat) in einem Programm benutzen kann.
https://livetiming.azurewebsites.net/event=20?config=w5
Die Seite läuft auch nur, wenn Rennen der NLS (Nürburgring-Langstrecken-Serie) laufen. Z.B. "JETZT" (01.05.2021, 13:25 h).
Wenn ich mir den Quelltext ansehe, dann ist die Tabelle bzw. sind die Daten da gar nicht enthalten. Hat bestimmt etwas mit den Scripts zu tun, aber das kriege ich nicht hin.
Habe auch schon mal mit Selenium herumexperimentiert, aber auch da bin ich einfach noch viel zu laienhaft.
Wer hat eine Idee, eine Lösung?
Merci und Gruß
Christof
- Marcus Herz
- 1000 working lines a day
- Beiträge: 860
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Livetiming auslesen
Ich vermute, die Daten kommen da rüber:
Code: Alles auswählen
<script src="/leaderboard.c758.bundle.js">
<script src="/vendor.6f89.bundle.js"></script>
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Livetiming auslesen
Hallo,
wenn es um das Auslesen von JavaScript geht, würde ich mal einen Blick auf phantomjs werfen. Das ist quasi ein Browser ohne Anzeige, mit dem man solche Seiten auslesen können sollte. (ich habe mich vor ein paar Jahren mal damit beschäftigt, aber aus Zeitgründen die Forschungen wieder eingestellt.)
wenn es um das Auslesen von JavaScript geht, würde ich mal einen Blick auf phantomjs werfen. Das ist quasi ein Browser ohne Anzeige, mit dem man solche Seiten auslesen können sollte. (ich habe mich vor ein paar Jahren mal damit beschäftigt, aber aus Zeitgründen die Forschungen wieder eingestellt.)
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Livetiming auslesen
Die Daten werden über die Scripte in kurzen Intervallen vom Server gelesen und entsprechend angepasst.
Ich habe mich auch schon mit einem solchen Fall beschäftigt und dann aufgegeben als ich bemerkt habe dass die Scripte und deren interne Variablen und Aufrufe auch immer wieder dynamisch verändert wurden und nie mit dem vorgehenden Event zusammenpassten. Es sollte damit geziehlt "Automatismus" und Nutzung verhindert werden.
Ich würde mal die Scripte (js) sichern und beim nächsten Event prüfen ob es noch die selben sind...... (MD5)
Wenn du weitemachen willst musst du in den Scripten die entsprechenden Aufrufe suchen mit denen die Daten vom Server abgerufen werden.
Ich habe mich auch schon mit einem solchen Fall beschäftigt und dann aufgegeben als ich bemerkt habe dass die Scripte und deren interne Variablen und Aufrufe auch immer wieder dynamisch verändert wurden und nie mit dem vorgehenden Event zusammenpassten. Es sollte damit geziehlt "Automatismus" und Nutzung verhindert werden.
Ich würde mal die Scripte (js) sichern und beim nächsten Event prüfen ob es noch die selben sind...... (MD5)
Wenn du weitemachen willst musst du in den Scripten die entsprechenden Aufrufe suchen mit denen die Daten vom Server abgerufen werden.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Livetiming auslesen
Hallo,
diese Seite wird dynamisch mittels REACT und AJAX-Techniken erzeugt.
Daten aus einer Html-Tabelle zu extrahieren ist mit JS keine Raketenwissenschaft:
// Spalten auslesen
var table = document.querySelector( "table.sc-kkGfuU bnUbKEe tbody" );
var twentytwoColumn = table.querySelectorAll( "tr + tr td:nth-child(22)");
twentytwoColumn.forEach((element) => {
wert= element.style.data";
});
oder wie folgt:
// alle Table-Elemente der Seite
const allTds = document.querySelectorAll('td')
// Find das td element mit dem Text "labs"
const labsTd = Array.from(allTds).find(td => td.textContent === 'labs')
// Ermittelt den Index dieses Elements in Bezug auf seine Geschwister
const childIndex = Array.from(labsTd.parentNode.children).indexOf(labsTd)
// alle td Elemente in der Tabelle mit dem gleichen child index
const column = labsTd.closest('table').querySelectorAll(`td:nth-child(${childIndex})`
usw....
Viele Grüße,
Olaf
diese Seite wird dynamisch mittels REACT und AJAX-Techniken erzeugt.
Daten aus einer Html-Tabelle zu extrahieren ist mit JS keine Raketenwissenschaft:
// Spalten auslesen
var table = document.querySelector( "table.sc-kkGfuU bnUbKEe tbody" );
var twentytwoColumn = table.querySelectorAll( "tr + tr td:nth-child(22)");
twentytwoColumn.forEach((element) => {
wert= element.style.data";
});
oder wie folgt:
// alle Table-Elemente der Seite
const allTds = document.querySelectorAll('td')
// Find das td element mit dem Text "labs"
const labsTd = Array.from(allTds).find(td => td.textContent === 'labs')
// Ermittelt den Index dieses Elements in Bezug auf seine Geschwister
const childIndex = Array.from(labsTd.parentNode.children).indexOf(labsTd)
// alle td Elemente in der Tabelle mit dem gleichen child index
const column = labsTd.closest('table').querySelectorAll(`td:nth-child(${childIndex})`
usw....
Viele Grüße,
Olaf
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Livetiming auslesen
Hallo
Das geht aber nur wenn die Seite es zulässt dass du dein eigenes script noch einfügen kannst.
Ob dies hier geht? Falls ja hast du recht dann gehts einfach.
Bei meinem Versuch ging es nicht.
Das geht aber nur wenn die Seite es zulässt dass du dein eigenes script noch einfügen kannst.
Ob dies hier geht? Falls ja hast du recht dann gehts einfach.
Bei meinem Versuch ging es nicht.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Livetiming auslesen
Da die Seiteninhalte bei Aufruf der Site mit REACT dynamisch erzeugt werden, können extern auf die von React erzeugten Seiteninhalte nicht zugegrifen werden.
Ich habe es mit PHP getestet:
Die Variable $quelltext_externe_seite enthält keine Daten sondern nur das HTML-Rahmengerüst dieser Seite. Die Tabelle wird von React bei dem Tag:
eingefügt.
Bleibt nur noch die Frage, ob der Betreiber dieser Seite eine öffentlich zugängliche API zum Abruf der Daten zur verfügung stellt. Ansonsten muss die Seite manuell herunter geladen werden um auf die Inhalte zugeifen zu können.
Viele Grüße
Olaf
Ich habe es mit PHP getestet:
Code: Alles auswählen
$quelltext_externe_seite = file_get_contents('https://livetiming.azurewebsites.net/event=20?config=w5');
Code: Alles auswählen
<div id="root" style="display: inline-block;"></div>
Bleibt nur noch die Frage, ob der Betreiber dieser Seite eine öffentlich zugängliche API zum Abruf der Daten zur verfügung stellt. Ansonsten muss die Seite manuell herunter geladen werden um auf die Inhalte zugeifen zu können.
Viele Grüße
Olaf
- Christof
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Mo, 01. Okt 2007 17:14
- Wohnort: Bedburg
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Livetiming auslesen
Erstmal DANKE an alle, die sich damit beschäftigt haben.
Scheint also leider nicht einfach zu sein. Aus Sicht des Anbieters verständlich.
@Lewi: Was meinst Du mit „manuell heruntergeladen“?
Ich stecke jetzt auch nicht mehr soooo viel Arbeit rein. Dann bleibt´s eben bei der angebotenen Darstellung. Ich hätte halt gerne z.B. das jeweilige Team und evt. ein Bild vom Auto dazu getan und einige vorhandene Spalten ausgeblendet.
VG
Christof
Scheint also leider nicht einfach zu sein. Aus Sicht des Anbieters verständlich.
@Lewi: Was meinst Du mit „manuell heruntergeladen“?
Ich stecke jetzt auch nicht mehr soooo viel Arbeit rein. Dann bleibt´s eben bei der angebotenen Darstellung. Ich hätte halt gerne z.B. das jeweilige Team und evt. ein Bild vom Auto dazu getan und einige vorhandene Spalten ausgeblendet.
VG
Christof
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Livetiming auslesen
Hallo Christof
aus eigener Erfahrung weiss ich dass die Daten-Anbieter z.T. mit nicht unerheblichem Aufwand versuchen genau solche "Nutzung" Ihrer (kostenlos) Daten zu verhindern. Weil meist wollen die (Anbieter) ja Ihre kostenpflichtige API vermarkten ...... Was ja auch verständlich ist .......
Valar Morghulis
Gruss Carlo
Gruss Carlo