Daten von Webseite mit R lesen
Daten von Webseite mit R lesen
Hallo zusammen,
ich versuche, eine Webseite mit R auszulesen
(https://www.adac.de/rund-ums-fahrzeug/a ... sche-daten).
Als Ergebnis hätte ich gerne die gezeigten Tabellen in einem Dataframe (linke Seite als Spaltennamen, rechte Seite als Zeile).
Das würde ich dann natürlich gern für mehrere Seiten machen um es nicht per copy paste machen zu müssen.
Mein Ansatz mit rvest oder ähnlichen Methoden ist bis jetzt komplett ins Leere gelaufen. Auch mit selector gadget war ich nicht in der Lage, das richtig auszulesen.
Hat jemand einen Tipp oder Ansatz für mich?
Danke und Gruß
Daniel
ich versuche, eine Webseite mit R auszulesen
(https://www.adac.de/rund-ums-fahrzeug/a ... sche-daten).
Als Ergebnis hätte ich gerne die gezeigten Tabellen in einem Dataframe (linke Seite als Spaltennamen, rechte Seite als Zeile).
Das würde ich dann natürlich gern für mehrere Seiten machen um es nicht per copy paste machen zu müssen.
Mein Ansatz mit rvest oder ähnlichen Methoden ist bis jetzt komplett ins Leere gelaufen. Auch mit selector gadget war ich nicht in der Lage, das richtig auszulesen.
Hat jemand einen Tipp oder Ansatz für mich?
Danke und Gruß
Daniel
Re: Daten von Webseite mit R lesen
Hallo Daniel,
eine Suche nach "R Web Scraping" fördert viele schöne Anleitungen, wie z. B. https://www.analyticsvidhya.com/blog/20 ... knowledge/ oder http://www.programmingr.com/examples/ex ... craping-r/ oder viele andere.
Bestimmt hast Du schon was durchprobiert und kannst etwas spezifischer erklären, an welcher Stelle Du hängst.
Es ist wahrscheinlicher, dass Dir jemand mit dem letzten Schritt hilft als dass jemand da jetzt eine Komplettlösung für Dich coded (obwohl man in diesem Forum nie weiß...).
LG,
Bernhard
eine Suche nach "R Web Scraping" fördert viele schöne Anleitungen, wie z. B. https://www.analyticsvidhya.com/blog/20 ... knowledge/ oder http://www.programmingr.com/examples/ex ... craping-r/ oder viele andere.
Bestimmt hast Du schon was durchprobiert und kannst etwas spezifischer erklären, an welcher Stelle Du hängst.
Es ist wahrscheinlicher, dass Dir jemand mit dem letzten Schritt hilft als dass jemand da jetzt eine Komplettlösung für Dich coded (obwohl man in diesem Forum nie weiß...).
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Daten von Webseite mit R lesen
Hi Bernhard,
den ersten Link hatte ich schon gesehen, den zweiten noch nicht.
Ich habe auch versucht, den ersten Link als "Vorlage" zu verwenden, um mir dann die entsprechenden Daten herauszuziehen. Mit dem Selectorgadget kann ich die entsprechenden Stellen auch anklicken und sehe dann, wie sie heißen.
Ich verstehe aber nicht, wie ich dann in R wirklich mit diesem Namen auf den Inhalt des Feldes zugreifen kann. Zum Teil heißen die Einträge in verschiedenen Tabellen auch gleich.
Beispielsweise heißt die Marke "BMW" in der ersten Tabelle ".gjxqXx".
Denselben Namen haben in der nächsten Tabelle die Kraftstoffart und die Motorart.
Mir fehlt jetzt einfach eine Idee, wie ich ein spezifisches Feld anspreche und auslese. Ich bin es von VBA und Excel so gewohnt, dass ich sage "nimm den Wert aus Zelle xy....". Eine entsprechende Möglichkeit wird es hier auch geben, aber ich verstehe es eben nicht.
Das genannte Beispiel hat mir eine Grundidee gegeben, wie ich das anstellen kann, aber ich kann es nicht einfach so umsetzen.
den ersten Link hatte ich schon gesehen, den zweiten noch nicht.
Ich habe auch versucht, den ersten Link als "Vorlage" zu verwenden, um mir dann die entsprechenden Daten herauszuziehen. Mit dem Selectorgadget kann ich die entsprechenden Stellen auch anklicken und sehe dann, wie sie heißen.
Ich verstehe aber nicht, wie ich dann in R wirklich mit diesem Namen auf den Inhalt des Feldes zugreifen kann. Zum Teil heißen die Einträge in verschiedenen Tabellen auch gleich.
Beispielsweise heißt die Marke "BMW" in der ersten Tabelle ".gjxqXx".
Denselben Namen haben in der nächsten Tabelle die Kraftstoffart und die Motorart.
Mir fehlt jetzt einfach eine Idee, wie ich ein spezifisches Feld anspreche und auslese. Ich bin es von VBA und Excel so gewohnt, dass ich sage "nimm den Wert aus Zelle xy....". Eine entsprechende Möglichkeit wird es hier auch geben, aber ich verstehe es eben nicht.
Das genannte Beispiel hat mir eine Grundidee gegeben, wie ich das anstellen kann, aber ich kann es nicht einfach so umsetzen.
Re: Daten von Webseite mit R lesen
Geh mal davon aus, dass hier eine Handvoll Leute sitzen, die vielleicht noch nie mit SelectorGadget oder mit rvest gearbeitet haben, grundsätzlich aber bereit wären, ihre Erfahrung zur Verfügung zu stellen.
Du hast Dich also an der von mir verlinkten Seite orientiert, hast erfolgreich durchgeführt und hast gefunden, dass der Selektor ".gjxqXx" zu für Dich relevanten Informationen führt. Dann sollst Du laut Anleitung als nächstes
machen. Hast Du das gemacht, was ist passiert, wie sehen die Fehlermeldungen oder die Ergebnisse aus?
Gruß,
Bernhard
Du hast Dich also an der von mir verlinkten Seite orientiert, hast
Code: Alles auswählen
webpage <- read_html(url)
Code: Alles auswählen
rank_data_html <- html_nodes(webpage,'.gjxqXx')
#Converting the ranking data to text
rank_data <- html_text(rank_data_html)
#Let's have a look at the rankings
head(rank_data)
Gruß,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Daten von Webseite mit R lesen
Das habe ich gemacht.
Das Ergebnis von
ist aber eine List of 0, d.h. ein leere Liste.
Das verstehe ich nicht. Hier liegt ja auch mein Problem, die Daten richtig anzusprechen.
Das Ergebnis von
Code: Alles auswählen
rank_data_html <- html_nodes(webpage,'.gjxqXx')
Das verstehe ich nicht. Hier liegt ja auch mein Problem, die Daten richtig anzusprechen.
Re: Daten von Webseite mit R lesen
Ich werde hier zwar nicht helfen können, aber guck doch bitte mal hier:viewtopic.php?f=20&t=11. Es nützt niemandem, wenn wir erst erfragen müssen, was du bisher gemacht hast, was dabei herausgekommen ist und welche Fehlermeldungen sich dabei zeigen.
Re: Daten von Webseite mit R lesen
Code: Alles auswählen
library(rvest)
url <- "https://www.adac.de/rund-ums-fahrzeug/autokatalog/marken-modelle/bmw/1er-reihe/f20-f21-facelift-2/276907/#technische-daten"
webpage <- read_html(url)
rank_data_html <- html_nodes(webpage,'.gjxqXx')
rank_data <- html_text(rank_data_html)
Re: Daten von Webseite mit R lesen
Hi,
Ich habe mir mal dieses SelectorGAdget installiert und rvest installiert. Ich kann mühelos auslesen, wieviele Beiträge es bisher in diesem Thread gibt und auf wieviele Seiten er angeschwollen ist:
führt zu
Versuche ich das gleiche auf der vom OP verlinkten Seite, funktioniert das nicht, auch ich bekomme da schon immer ein leere html_nodes.
Der verlinkten Seite ist zu entnehmen, die Gemischaufbereitung sei "Common Rail". Lasse ich mir aber den Seitenquelltext anzeigen, der für Menschen unlesbar ist, und suche dort nach "Common Rail", dann gibt es Null Treffer. Mit anderen Worte: Was wir da scrapen wollen steht nicht auf dieser Seite. Wahrscheinlich wird es irgendwie von irgendwo anders nachgeladen, wahrscheinlich über eines der über 20 erwähnten JavaScript Scripte.
Irgendwo im Quelltext findet man einen link as="fetch" auf "/page-data/rund-ums-fahrzeug/autokatalog/marken-modelle/bmw/1er-reihe/f20-f21-facelift-2/276907/page-data.json" In diesem JSON dürfte vermutlich alles drin stehen, was Du scrapen willst. Aber wie man da dran kommt?
LG,
Bernhard
Ich habe mir mal dieses SelectorGAdget installiert und rvest installiert. Ich kann mühelos auslesen, wieviele Beiträge es bisher in diesem Thread gibt und auf wieviele Seiten er angeschwollen ist:
Code: Alles auswählen
library(rvest)
url <- "http://forum.r-statistik.de/viewtopic.php?f=7&t=2049"
webpage <- read_html(url)
data_html <- html_nodes(webpage,'.pagination')
str(data_html)
data <- html_text(data_html)
print(data)
Code: Alles auswählen
> print(data)
[1] "\n\t\t\t7 Beiträge\n\t\t\t\t\t\t\t• Seite 1 von 1\n\t\t\t\t\t"
[2] "\n\t\t\t7 Beiträge\n\t\t\t\t\t\t\t• Seite 1 von 1\n\t\t\t\t\t"
Der verlinkten Seite ist zu entnehmen, die Gemischaufbereitung sei "Common Rail". Lasse ich mir aber den Seitenquelltext anzeigen, der für Menschen unlesbar ist, und suche dort nach "Common Rail", dann gibt es Null Treffer. Mit anderen Worte: Was wir da scrapen wollen steht nicht auf dieser Seite. Wahrscheinlich wird es irgendwie von irgendwo anders nachgeladen, wahrscheinlich über eines der über 20 erwähnten JavaScript Scripte.
Irgendwo im Quelltext findet man einen link as="fetch" auf "/page-data/rund-ums-fahrzeug/autokatalog/marken-modelle/bmw/1er-reihe/f20-f21-facelift-2/276907/page-data.json" In diesem JSON dürfte vermutlich alles drin stehen, was Du scrapen willst. Aber wie man da dran kommt?
(von der Website mit der Anleitung zum scrapen)But to master the art of Web scraping, I’ll highly recommend you to learn HTML & CSS in order to better understand and appreciate what’s happening under the hood.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Daten von Webseite mit R lesen
Es ist nicht alles verloren! Das hier ergibt erstmal Informationen von der ADAC-Homepage über verschiedene Autos:
Was davon jetzt wie anzusprechen und zu verwerten ist, musst Du selbst herausfinden.
LG,
Bernhard
Code: Alles auswählen
library(rjson)
autos <- fromJSON(file = paste("http://adac.de/page-data/rund-ums-fahrzeug/autokatalog/marken-modelle/bmw/1er-reihe/f20-f21-facelift-2/276907/page-data.json"))
head(autos)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Daten von Webseite mit R lesen
Code: Alles auswählen
library(rjson)
autos <- fromJSON(file = paste("http://adac.de/page-data/rund-ums-fahrzeug/autokatalog/marken-modelle/bmw/1er-reihe/f20-f21-facelift-2/276907/page-data.json"))
head(autos)
Trotzdem bleibe ich an einer Stelle noch hängen:
Die Daten, die mich interessieren, kann ich quasi über
Code: Alles auswählen
autos2<-autos$result$pageContext$fahrzeug$technischeDaten
Das Ergebnis ist eine "list of 8". Die 8 Elemente sind die auf der Webseite angezeigten Kategorien
Allgemein, Motor und Antrieb, Maße und Gewichte, Karosserie und Fahrwerk, Messwerte Hersteller, Sicherheitsausstattung, Herstellergarantien, Preise und Ausstattung.
Wenn ich mir beispielsweise
Code: Alles auswählen
autos2[1]
Code: Alles auswählen
[[1]]
[[1]]$name
[1] "Allgemein"
[[1]]$daten
[[1]]$daten[[1]]
[[1]]$daten[[1]]$name
[1] "Marke"
[[1]]$daten[[1]]$wert
[1] "BMW"
[[1]]$daten[[2]]
[[1]]$daten[[2]]$name
[1] "Modell"
[[1]]$daten[[2]]$wert
[1] "120d"
Es soll letztendlich da als Überschrift stehen "Marke", "Modell",...und in der ersten Zeile dann "BMW", daneben "120d", etc...